jquery ajax完成函数没有触发

我有一个非常简单的jQuery Ajax调用(下面)。 执行Ajax调用,我可以在Firebug Net面板中看到服务器返回200 OK并返回一个字符串“OK”。 但是,完成和失败function都不会触发! 很沮丧!

(“之前”和“之后”警报会触发。)

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

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"); 

您需要链接done()fail()函数,它们不是$.ajax使用的options对象的一部分:

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

此外,由于ajax是异步的,如果“after”警报出现在“成功”警报之前,请不要惊讶。

successerror回调可以这种方式使用。 对于donefail ,您需要:

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

要么 :

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

你还需要dataType:’json’。 我有这个问题,我把它设置为’字符串’,它不会触发完成方法

我有这样的设置:

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

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