[英]JQuery ajax success fired twice, because of .done callback
我有一些旧代码,在场景中中止ajax请求,然后在用户响应后重新发送该请求。
function resendLastAjaxRequest(ajaxRequest, ajaxSettings){
if(ajaxSettings != undefined){
$.ajax(ajaxSettings).done(function ( data ) {
ajaxSettings.success(data);
});
}
现在,上面的代码为请求触发了成功处理程序两次,但是它已经存在了一年多了,没人遇到。 是因为jquery版本更新。 我们目前使用的是2.0.3,我不知道何时确切地更新了jquery,但可能是在较早的版本中done
了而不是success
。 进行了一些挖掘,但找不到任何原因使它工作了这么长时间,请提供帮助。
更新
它包含一条评论说
好的,它是jQuery 1.8 :)由于$ .ajax从jQuery 1.5返回了promise,这是一个简单的替换,以解决一致性问题(使用deferred接口):done()代替了success(),fail()表示错误()和always()代表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"
就像我在评论中说的那样,我认为以前您的jQuery版本低于1.5 (未实现.done()
),因此成功方法作为回调调用,然后.done()
在控制台中引发错误而不会破坏任何内容(就像undefined is not a function
)。 因此,在这种情况下,控制台中将发生错误,并且仅调用了一个回调函数。
jQuery 1.4.4演示: jsfiddle
在控制台中:
1错误 :
undefined is not a function
(由于.done()
)
和
1个日志 :
Object
(来自调用的数据)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.