ajax request.done使脚本坏了吗?

时间:2012-02-04 00:32:44

标签: jquery ajax

我正在尝试使用jquery发送ajax请求。在本教程中,我尝试了这个简单的脚本:

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()之前。那么这里有语法错误吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是1.5之前的jQuery版本.ajax()不支持promise接口,那么我认为您的脚本在尝试使用.done()时会崩溃,这与处理停止在“等待”消息。

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

答案 1 :(得分: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 );
    });