JQuery ajax success被触发两次,因为有.done回调。

8 浏览
0 Comments

JQuery ajax success被触发两次,因为有.done回调。

我有一些遗留的代码,在某种情况下中断ajax请求,然后在用户响应后重新发送该请求。

现在,上面的代码会触发请求的成功处理程序两次,但它已经存在了一年多,没有人遇到过这个问题。这是因为jQuery版本更新的原因吗?我们目前使用的是2.0.3版本。

我不知道jQuery何时被更新,但可能在早期版本中,使用的是done而不是success。

我进行了一些调查,但找不到为什么它可以工作那么长时间的原因,请帮忙解答。

更新:

what is difference between success and .done() method of $.ajax

其中有一个评论说:

好吧,这是jQuery 1.8 🙂 自从jQuery 1.5开始,$.ajax返回一个promise

这只是为了保持一致性(使用延迟接口)的一个简单替换:done()代替success(),fail()代替error(),always()代替complete()

这意味着如果调用了done,那么我们必须显式触发success。这可能是它能够长期工作的原因。但现在,在done触发之前,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
0 Comments

JQuery ajax success fired twice, because of .done callback这个问题的出现是因为之前使用的是低于1.5版本的JQuery,没有实现.done()方法,所以success方法作为回调被调用,然后.done()在控制台抛出一个错误,但没有中断任何操作(比如undefined is not a function)。所以在这种情况下,控制台会有一个错误,只有一个回调函数被调用。

解决方法是升级JQuery的版本到1.5或更高版本,或者可以手动在代码中添加.done()方法的实现。

以下是一个使用JQuery 1.4.4版本的示例:

Demo with jQuery 1.4.4: jsfiddle

在控制台中会有以下输出:

1个错误: undefined is not a function(因为.done()方法)

1个日志: Object(来自调用的数据)

所以,为了解决这个问题,可以升级JQuery版本或手动添加.done()方法的实现。

0