2013-12-19 70 views
0

我有以下HTML結構:如何通過AJAX調用(CodeIgniter的框架)形式的數據傳遞給PHP

<form method="POST"> 
    Name : <input id="asgname" type="text"> <br> 
    Description : <input id="asgdescription" type="text"> <br> 
    <a href="#" id="asgsave" class="assignment-action">Save</a> 
</form> 

我想上點擊保存按鈕,表單值通過AJAX發送到服務器呼叫。 對於這一點,我已經通過下面的命令

$("#asgsave").click(save_assignment); 

save_assignment附加click事件也被定義爲後續的JavaScript函數:

function save_assignment() { 
    return $.ajax({ 
      type: "POST", 
      url: "<?php echo base_url();?>index.php/user/save_assignment", 
      data: $('form').serialize(), 
       success: function(response) { 
        alert('Form was submitted'); 
       }, 
       error: function(error) { 
        alert("Error"); 
       } 
    }); 
} 

以上不工作。所以我也嘗試了以下方法:

function save_assignment() { 
    var formvalues = { 
      name  : $('#asgname').text(), 
      descripion : $('#asgdescription').text(), 
    }; 
    return $.ajax({ 
      type: "POST", 
      url: "<?php echo base_url();?>index.php/user/save_assignment", 
      data: {values : formvalues}, 
       success: function(response) { 
        alert('Form was submitted'); 
       }, 
       error: function(error) { 
        alert("Error"); 
       } 
    }); 
    } 

但是這也行不通。

任何人都可以請指導我爲什麼是上述方法不工作,以及這樣做的正確方法是什麼?

編輯-1:

如果不工作,我的意思是:在第一種情況下($(「形式」)序列化()方法)的數據沒有被髮送到服務器。我通過chrome和firefox調試器檢查過,沒有發送相應的表單發佈的數據。

而在第二種情況下,正在發送空值。即發送到服務器的發佈數據如下:

values[name] 
values[description] 

即上述值爲空。

EDIT 2:

通過登錄firephp,我已經證實,save_assignment PHP腳本正在執行。因此,Ajax調用工作正常,但它沒有正確傳遞數據。

+0

什麼是「這也不行」是什麼意思?你沒有錯誤,你沒有迴應等等。您是否使用Chrome Inspector查看您的ajax調用及其響應? – Jakub

+0

@Jakub:在編輯中添加了信息。 – user1599964

+0

當所有其他都失敗時,從前面到後面排除故障(js - > php)。除非你發現從服務器端返回的錯誤(使用檢查器),否則不要進入PHP。如果你一次深入研究PHP + JS,你肯定會錯過一些東西。 'console.log()'是你的朋友,用它來輸出你認爲你發送的所有值。 – Jakub

回答

0

你在成功的函數使用回調,原因是AJAX異步

編輯

有你已經嘗試過在你的函數console.log('foo');?所以你可以測試是否被調用的函數;)

編輯2

以下行添加到您的AJAX選項

dataType: "json" 
+0

在編輯中添加了信息。 – user1599964

+0

我也編輯我的帖子:) – MaiKaY

1

嘗試使用event.preventDefault()一樣,

$("#asgsave").on('click',function(e){ 
    e.preventDefault(); 
    save_assignment(); 
}); 

使用return false之後ajax調用like,

function save_assignment() { 
    //ajax code 
    return false; 
} 
0

你可以只serialize表單值:
http://api.jquery.com/serialize/

不過,看在你的代碼,我將採取防刺和猜測,你沒有得到妥善發送你的價值觀。使用jQuery,你搶的值從輸入像這樣:

$('#idofInput').val(); 

http://api.jquery.com/val/

你正在做的:$('#asgname').text()

格式的數據正確:data : { foo : 'bar', bar : 'foo' }

最後一個猜測,請確保您的CodeIgniter配置禁用了CSRF保護,否則您需要通過:$this->security->get_csrf_token_name() & $this->security->get_csrf_hash();

相關問題