jquery ajax完成函数没有触发

mis*_*son 27 jquery

我有一个非常简单的jQuery Ajax调用(下面).Ajax调用执行,我可以在Firebug Net面板中看到服务器返回200 OK并返回一个字符串"OK",因为它应该.但是,完成和失败功能不会触发!很沮丧!

("之前"和"之后"警报会触发.)

为了简单起见(以及作为一种调试技术),我已将其剥离为最裸露的骨架,但处理程序仍无法触发.我在这里看不到什么?

postUrl= "/mod/users/check_email/";
dataToPost= { email: "test@not.me" };

alert("before");
$.ajax
({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
    done: function() 
    {
        alert("Success.");
    },
    fail: function() 
    {
        alert("Sorry. Server unavailable. ");
    },
});  // end Ajax call 

alert("after");
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 53

您需要链接done()fail()函数,它们不是以下选项对象的一部分$.ajax:

$.ajax({
    type: "POST", 
    url : postUrl,
    data: dataToPost
}).done(function()  {
    alert("Success.");
}).fail(function()  {
    alert("Sorry. Server unavailable. ");
}); 
Run Code Online (Sandbox Code Playgroud)

此外,由于ajax是异步的,如果"after"警报出现在"success"警报之前,请不要惊讶.


Mus*_*enç 14

success并且error可以以这种方式使用回调.对于donefail,你需要这样做:

$.ajax({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
}).done(function() {
    alert("Success.");
}).fail(function() {
    alert("Sorry. Server unavailable. ");
});
Run Code Online (Sandbox Code Playgroud)

要么 :

$.ajax({
    type: "POST", 
    url: postUrl,
    data: dataToPost,
    success: function() {
            //code here
    }
});
Run Code Online (Sandbox Code Playgroud)


WtF*_*dgE 11

你还需要设置dataType: 'json'.我设置它时遇到了这个问题'string'而且它没有触发该done方法.


小智 9

我有这样的设置:

$.ajax({
    type: "POST", 
    url : postUrl,
    data: dataToPost
}).done(function()  {
    alert("Success.");
})
Run Code Online (Sandbox Code Playgroud)

并遇到了同样的问题:完成功能不会触发.虽然我在设置之前已经成功地使它工作了很多次,但我花了一些时间来弄清楚发生了什么.经过调整后,我发现它还取决于Ajax调用返回的数据类型.最初,我配置了ajax调用以返回一些HTML.完成功能不起作用.在我将其更改回json(在Flask中使用jsonify)后,它再次起作用.