由于.done回调,JQuery ajax成功解雇了两次

我有一些遗留代码,它会在场景中中止ajax请求,然后在用户响应之后重新发送该请求。

function resendLastAjaxRequest(ajaxRequest, ajaxSettings){ if(ajaxSettings != undefined){ $.ajax(ajaxSettings).done(function ( data ) { ajaxSettings.success(data); }); } 

现在,上面的代码两次触发请求的成功处理程序,但它已经存在超过一年并且没有人遇到它。 是因为jquery版本更新。 我们目前正在使用2.0.3我不知道jquery究竟何时更新,但可能在早期版本中被解雇而不是success 。 做了一些挖掘,但找不到任何理由可能已经工作了这么久,请帮忙。

更新

$ .ajax的成功和.done()方法之间有什么区别

它包含评论说

好吧,这是jQuery 1.8 :)因为$ .ajax从jQuery 1.5返回一个promise,这是一个简单的替换,一致性(使用延迟的接口):done()取代success(),fail()表示错误()和always()for complete()

这意味着如果调用done ,那么我们必须明确地触发success 。 这可能是它长期工作的原因。 但是现在,在完成触发之前,已经调用了success处理程序,然后done回调再次调用success处理程序。

有关如何更改/修改代码的任何建议,只能调用一次success

编辑

ajaxSettings看起来像这样:

 accepts: Object async: true cache: false complete: function (request, status) contentType: "application/x-www-form-urlencoded; charset=UTF-8" contents: Object converters: Object crossDomain: false dataTypes: Array[1] error: function (request, status){flatOptions: Object global: true hasContent: false isLocal: false jsonp: "callback" jsonpCallback: function (){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}loadingdisplay: trueprocessData: true responseFields: Object success: function (htmlData) {type: "GET" 

就像我在评论中所说的,我认为以前你有一个低于1.5jQuery版本(没有实现.done() )所以成功方法被调用作为回调然后.done()在控制台中抛出错误而不破坏任何东西(像undefined is not a function )。 因此,在这种情况下,控制台中出现错误,只调用一个回调函数。

使用jQuery 1.4.4进行演示: jsfiddle

在控制台中:

1错误undefined is not a function (因为.done()

1 logObject (来自呼叫的数据)