gpt4 book ai didi

javascript - 由于 .done 回调,JQuery ajax 成功触发了两次

转载 作者:行者123 更新时间:2023-12-03 11:45:30 24 4
gpt4 key购买 nike

我有一些遗留代码,它们会在场景中中止 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

它包含一条评论说

ok, it's jQuery 1.8 :) Since $.ajax return a promise from jQuery 1.5 this is a simple substitution for a matter of consistency (using the interface of deferred): done() take place of success(), fail() for error() and always() for complete()

这意味着如果调用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 不是函数)。因此,在这种情况下,控制台中会出现错误,并且只调用了一个回调函数。

使用 jQuery 1.4.4 进行演示:jsfiddle

在控制台中:

1 error : undefined is not a function (because of .done())

1 log : Object (datas from the call)

关于javascript - 由于 .done 回调,JQuery ajax 成功触发了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26072445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com