2013-02-25 94 views
0

我有以下的Ajax代碼部分:如何診斷不會拋出任何錯誤消息的AJAX錯誤?

$(document).ready(function(){ 
    $("form input#dodaj").click(function(){ 
     var s = $("form input#zad").val(); 
     var str = "<li>"+s+"</li>"; 
     $.ajax({ 
      type: "GET", 
      url: "http://lesni.org/kss/dodaj_zadanie.php", 
      data: { 
       pid: ($(this).attr('alt')), 
       zad: encodeURI(s)}, 
      error: function(err){ alert(err); } 
       } 
      ).done(function(){ 
       $("ul#zadania").append(str); 
       $("form input#zad").val(" "); 
      }); 
     });  
    }); 

注:頁面加載上面的代碼是從一個URL像http://lesni.org/some/page,因此同源策略是不是一個問題。

但它似乎沒有工作,我不知道爲什麼。

它所調用的PHP文件是正確的。當我在瀏覽器中手動輸入時:

http://lesni.org/kss/dodaj_zadanie.php?pid=1&zad=abc 

它工作正常(向數據庫添加記錄)。但是ajax代碼不起作用。它不會拋出任何錯誤,或者我不知道它是否會拋出任何錯誤...

所以問題是:如何診斷AJAX代碼的這一部分以瞭解錯誤。我也試過POST版本,沒有任何效果。

+3

使用FireBug或DeveloperTools並檢查網絡流量 – Philipp 2013-02-25 22:56:26

+1

一個起點是使用'error'回調給你的信息。'error:function(err){alert(err); }''不會給你任何有用的信息,因爲['error'回調](http://api.jquery.com/jQuery.ajax/)的第一個參數是jQuery XHR對象。第二和第三個參數更有用。 – 2013-02-25 22:57:02

+0

Btw ..你必須在uri中傳遞GET參數而不是數據字段 – Philipp 2013-02-25 22:57:34

回答

1

你指定data這樣的:

data: { 
    pid: ($(this).attr('alt')), 
    zad: encodeURI(s) 
} 

當通過data傳遞一個對象 jQuery的,你需要(或希望)編碼。 (你只用一個字符串做。)jQuery爲你做。 (如果你確實想編碼它,你想要encodeURIComponent,而不是encodeURI)。所以你最終會得到雙重編碼的實體,因此將不能正常工作。

這應該是:(你也不必繞pid值的括號,但他們是無害的,所以我已經離開他們)

data: { 
    pid: ($(this).attr('alt')), 
    zad: s 
} 


但是回答這個問題

How to diagnose AJAX error which is not throwing any error messages?

...你做到這一點

  • 綜觀任何像樣的瀏覽器的開發工具,網絡選項卡,這表明你正是它發送到服務器和它回來。

  • 使用服務器端調試(正確調試或將某些內容傾銷到日誌中)查看完全是服務器收到的內容。

  • 查看服務器端日誌以確保請求正確的資源。

...等等。

+0

我不知道爲什麼,但它似乎工作。我刪除了'encodeURI',它似乎開始工作。謝謝! – Gacek 2013-02-25 23:39:55

+0

@Gacek:可能是雙重編碼的東西。我很高興分類! – 2013-02-25 23:40:22