2012-03-06 67 views
0

經過大量編碼後,我覺得我終於圍繞AJAX,JSON和CI在一定程度上圍繞我的腦袋。CI_model無法正確捕獲POST JSON數據

但是,我覺得我已經擊中了一個最後的障礙。下面是我的代碼:

HTML

<div id="structures"> 
    <h1>Build</h1> 
    <form name="buildForm" id="buildForm" method="POST" action="<?php echo base_url(); ?>/ajax/index/"> 
     <select name="buildID" class="buildClass"> 
     <option value="0" selected="selected" data-skip="1">Build a Structure</option> 
<?php foreach ($structures as $structure_info): ?> 
    <option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i> 
     <?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option> 
<?php endforeach ?> 
     </select> 
     <div id="buildSubmit"> 
      <input id ="btnSubmit" class="button" type="submit" value="Submit"/> 
     </div> 
    </form> 
</div> 

在這裏,我只是我的建築形式。

AJAX/JS

$(function(){ 
    $("#buildForm").click(function(e, buildID){ 
     e.preventDefault(); 
     var frm = $(document.buildForm); 
     var dat = JSON.stringify(frm.serializeArray()); 
     alert("I am about to POST this:\n\n" + dat); 
     $.post(
      frm.attr("action"), 
      dat,   
     function(response) 
     { 
      alert(response); 
     } 
    ); 
}); 
}); 

型號功能

我創建了一個新的控制器類擴展 「阿賈克斯」 和功能 「指數」 這一簡單的調用我的模型「insert_build。 「我的解決方法是將.js文件從頁面中取出並保存在頁眉中。

無論如何。當我點擊提交按鈕時,它會成功警告JSON輸出。雖然它傳遞給控制器​​ - >模型後,它似乎沒有捕捉到任何地方。我假設我做錯了,但無法弄清楚什麼。

感謝您的幫助。

+0

不知道,如果它只是你如何粘貼成左右,但「這 - $>輸入 - >後(DAT)」應爲「$這個 - >輸入 - >後('dat')「 – Tjkoopa 2012-03-06 23:16:14

+0

一個小提示,可能會在未來幫助你。給console.log一個嘗試,而不是警報。它只是讓事情更優雅;)。 – 2012-03-07 07:46:20

回答

1

在這裏嘗試幾件事。

var frm = $(document.buildForm);嘗試提醒它的動作值

alert(frm.attr("action")); 

,以確保您$.post實際上是得到一個有效的URL。

然後嘗試更改您的insert_build函數以打印出它正在接收的內容。您不應該致電$this->input->post(dat);,因爲您不會有一個名爲dat的帖子。

public function insert_build() 
{ 
    print_r($_POST); 
} 

編輯

你需要的JSON字符串傳遞的網址PARAM。嘗試

$.post(frm.attr("action"), {data:dat}, function(response) 
    { 
     alert(response); 
    }); 

然後改變你的PHP

public function insert_build() 
{  
    $str_id = $this->input->post('data'); 
    print_r(json_decode($str_id)); 
} 
+0

謝謝。該動作指向一個帶有兩個斜槓(//)的URL,雖然即使在修復此錯誤之後,它仍然返回並用「print_r($ _ POST)」返回空數組; – 2012-03-06 22:30:07

+0

我認爲它可能與「stringify」有關ajax。當我刪除它時,提交返回了我正在尋找的值。任何解釋爲什麼會非常有幫助!謝謝 – 2012-03-06 23:03:38

+0

@RickyMason檢查我的編輯。 – 2012-03-07 00:46:50

1

爲什麼不使用$阿賈克斯?

$('#buildForm').live('click', function(event){ 
var data = $('form[name="buildForm"]').serialize(); 
    $.ajax({ 
     url:'<?php echo base_url(); ?>ajax', 
     data:data, 
     type:'post', 
     success:function(result){ 
      alert(result); 
     }, 
     error:function(result){ 
      alert(result); 
     } 
    }); 
}); 

希望這有助於