2012-03-21 96 views
0

我已經嘗試了很多東西,無法弄清楚這一點,我使用這段代碼,並且我知道開始工作,因爲它連接到的腳本在數據庫中粘貼一些信息,但回調從未運行。Ajax與JQuery的 - 回調不執行

<script type="text/javascript"> 
$(document).ready(function() { 
    $(document.body).on('click', "#reply_submit", function() { 
      var formData = $('#reply').serialize(); 


      $.post("newpost.php",formData, function(data){ 
        alert("hi"); 
      }, "json"); 
    }); 

});

我的表單的ID是「回覆」,我用來提交它的按鈕是「reply-submit」,只是爲了確保這些事情是清楚的。

它也不工作,如果我刪除最後一個「json」的事情順便說一句。

+0

你得到的錯誤信息是什麼? – Asdfg 2012-03-21 04:14:19

+0

檢查你在控制檯中得到的錯誤... – 2012-03-21 04:16:01

+0

你有我們可以看到的URL嗎?如果你使用的是火蟲,你會得到什麼錯誤?你在Net標籤下看到了什麼樣的反饋? – 2012-03-21 04:17:00

回答

1

如果你讀了jQuery.post()的文檔,它說這個關於回調:

成功(數據,textStatus,jqXHR)
如果請求成功時執行的回調函數。

如果它沒有被調用,這意味着請求沒有成功。在newpost.php(在數據插入後的某個時間,但通常會退出之前)可能有錯誤。

您還可以通過使用長形jQuery.ajax()而不是速記後趕上的錯誤條件:

$.ajax({ 
    url: 'newpost.php', 
    data: formData, 
    type: 'post', 
    dataType: 'json', 
    success: function(data, textStatus, jqXHR) { 
     alert('success'); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert('error!'); 
    } 
}); 
+0

我認爲這是事實,我的後端腳本似乎突然間出現了一些錯誤。說實話,現在它有點模糊,但是,我認爲這是問題: – Cocorico 2012-03-21 05:16:22

1

當您單擊,形式也正在提交的標準方式。修改你的點擊處理程序是這樣的:

$(document).on('click', "#reply_submit", function(e) { 
    e.preventDefault(); // prevent the default submit event 
    var formData = $('#reply').serialize(); 
    // ... 
}); 

雖然我覺得document.body應該是jQuery來包裝一個有效的節點,我也它修改爲較常用的document

在該注意事項中,如果窗體永遠不會被Ajax事件或其他DOM修改所破壞,您可以綁定到#reply而不是document(或body)。

1

我只是假設你想提交一個表單而不用重新加載整個頁面。 基於這一假設,以下代碼將用於此目的。

$(document).ready(function(){ 

//on form submit event 
$('form#reply').submit(function(){ 
    $.post('newpost.php',$(this).serialize(),function(){ 
     alert("Message or do something with the response data if you are expecting one"); 
    }); 

    //prevent default action 
    return false; 
}); 

}); 

如果這不是您在項目中尋找的功能,請忽略該帖子。