由于.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.5的jQuery版本(没有实现.done()
)所以成功方法被调用作为回调然后.done()
在控制台中抛出错误而不破坏任何东西(像undefined is not a function
)。 因此,在这种情况下,控制台中出现错误,只调用一个回调函数。
使用jQuery 1.4.4进行演示: jsfiddle
在控制台中:
1错误 :
undefined is not a function
(因为.done()
)
和
1 log :
Object
(来自呼叫的数据)
- 只需在JQUERY类中单击一下即可
- 截取表单,添加数据,ajax,然后提交。
- XMLHttpRequest无法加载,没有’Access-Control-Allow-Origin’标头(无法读取JavaScript / jQuery中的Ajax响应)
- 如何设置jQuery Ajax调用以在Asp.Net MVC中的thair请求头中全局注入AntiForgeryToken
- 每个人等到完成$ .ajax,然后继续
- jQuery load()代码在Google Chrome中无效
- jQuery:UTF-8无法使用ajax请求
- 如何从jquery .load获取php respone
- 如何使用跨站点脚本的JQuery制作ajax?