2012-02-04 65 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