我有一些遗留代码,可以在场景中放弃ajax请求。然后在用户响应之后,重新发送该请求。
function resendLastAjaxRequest(ajaxRequest, ajaxSettings){
if(ajaxSettings != undefined){
$.ajax(ajaxSettings).done(function ( data ) {
ajaxSettings.success(data);
});
}
现在,上面的代码两次激活了请求的成功处理程序,但是它已经存在了一年多了&没有人遇到过它。是因为jquery版本更新。我们目前正在使用2.0.3
我不知道jquery究竟何时更新,但可能在早期版本done
被解雇而不是success
。
做了一些挖掘但却找不到任何可能长期工作的理由,请帮忙。
更新
what is difference between success and .done() method of $.ajax
它包含评论说
好吧,它是jQuery 1.8 :)因为$ .ajax从jQuery 1.5返回一个promise 这是对一致性的简单替换(使用 延迟接口):done()代替success(),fail() error()和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"
答案 0 :(得分:1)
就像我在评论中所说,我认为之前你有一个 jQuery 版本低于1.5 (没有实现.done()
)所以调用了成功方法作为回调,然后.done()
在控制台中抛出错误而不会破坏任何内容(如undefined is not a function
)。因此,在这种情况下,控制台中出现错误,只有一个回调函数被调用。
使用 jQuery 1.4.4进行演示:jsfiddle
在控制台中:
1错误:
undefined is not a function
(由于.done()
)
和
1 log :
Object
(来自通话的数据)