2012-02-04 26 views
0

我想發送一個使用jQuery的ajax請求。從本教程中,我試試這個簡單的腳本:ajax request.done使腳本崩潰了嗎?

function show(){ 
    $("#mesg").html("begin"); 

    var request = $.ajax({ 
     type: "POST", 
     url: "some url", 
     data: '{"user_name": "NAME"}', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json" 
    }); 

    $("#mesg").html("waiting"); 

    request.done(function(){ 
     $("#mesg").html("done sending"); 
    }); 

    $("#mesg").html("still waiting"); 

    request.fail(function(){}); 

    $("#mesg").html("end of function"); 
} 

因此請求應該失敗,#mesg的內容應該是「函數結束」。但是,我得到的是「等待」,這是request.done()之前。那麼這裏是否有語法錯誤?

+1

您使用的是哪個版本的jQuery?如果它早於1.5,'.ajax()'不支持promise接口,所以我會認爲你的腳本在嘗試使用'.done()'時會崩潰,並且這與處理停在「waiting」信息。你在控制檯中是否有任何錯誤? – nnnnnn 2012-02-04 01:03:36

+0

這就是問題所在!顯然我從w3school複製了這個:src =「http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js」,並沒有注意到它不是最新的。擰我!非常感謝! – Thien 2012-02-04 01:32:29

+0

不客氣。從那以後,我發佈了我的評論作爲答案... – nnnnnn 2012-02-04 01:35:50

回答

1

如果您使用的是jQuery的版本早於1.5 .ajax()不支持承諾接口,所以我會認爲,當它試圖使用.done()腳本會崩潰,並且將與處理的停止一致「等待」消息。

更新到最新版本(或至少1.5+),它應該可以工作。

+0

謝謝!這解決了我的問題:-) – Thien 2012-02-06 00:23:27

0

來自jquery文檔的示例是這樣的。你有數據引用你的數據可能會刪除這些並刪除引號周圍的參數名稱,只留下引號中的值。並確保你的參數名稱是正確的。

您還應該捕獲從帖子中獲得的「msg」。如下面的例子。

var menuId = $("ul.nav").first().attr("id"); 
    var request = $.ajax({ 
     url: "script.php", 
     type: "POST", 
     data: {id : menuId}, 
     dataType: "html" 
    }); 

    request.done(function(msg) { 
     $("#log").html(msg); 
    }); 

    request.fail(function(jqXHR, textStatus) { 
     alert("Request failed: " + textStatus); 
    }); 
+0

我並沒有試圖發送請求。這似乎是我有語法問題,請求是好的,因爲我可以得到這行執行:$(「#mesg」)。html(「waiting」); 但是,我按照您的建議編輯數據爲 data:{user_name:「NAME」} 並且它仍然不起作用。或者它仍然不正確地把數據放在那裏? 謝謝! – Thien 2012-02-04 00:51:26

+0

嘗試在你的完成和失敗請求中捕獲實際的消息,如上所示'request.done(function(msg){...' – EKet 2012-02-04 00:56:01