如何取消jQueryAjax成功处理程序的所有后续成功回调?
我使用的是jQuery1.5.2,在Ajax请求中注册了多个成功回调。在第一次成功回调中,我需要检查响应是否包含我需要的所有数据,如果没有,则取消所有后续成功回调 注意:我无权访问服务器发送的标题。它总是发送一个如何取消jQueryAjax成功处理程序的所有后续成功回调?,jquery,ajax,event-handling,Jquery,Ajax,Event Handling,我使用的是jQuery1.5.2,在Ajax请求中注册了多个成功回调。在第一次成功回调中,我需要检查响应是否包含我需要的所有数据,如果没有,则取消所有后续成功回调 注意:我无权访问服务器发送的标题。它总是发送一个200成功 第二个注意:我不能将这两个回调组合起来。这是一个简化的例子,说明了一个较大的系统在代码中的不同位置注册回调时遇到的问题 如何取消后续的成功回调? 一些示例代码如下所示(): 谢谢大家! 只需合并 // Success handler request.done(function
200成功
第二个注意:我不能将这两个回调组合起来。这是一个简化的例子,说明了一个较大的系统在代码中的不同位置注册回调时遇到的问题
如何取消后续的成功回调?
一些示例代码如下所示():
谢谢大家! 只需合并
// Success handler
request.done(function(data, textStatus, jqXHR) {
console.log('first', jqXHR);
if ($.isEmptyObject(data)) {
return;
}
else {
console.log('second', jqXHR);
}
});
或者试试这个:
var request = $.ajax({
url: '/echo/json'
});
second = true;
// First success handler
request.done(function(data, textStatus, jqXHR) {
console.log('first', jqXHR);
if ($.isEmptyObject(data)) {
second = false;
}
});
// Second success handler
request.done(function(data, textStatus, jqXHR) {
if(second)
console.log('second', jqXHR);
});
Fiddle:在回调函数中,您应该做的第一件事是检查状态变量(或“flag”),根据当前情况,它将通知函数是否可以执行 不想再执行回调了吗?将该标志设置为某个值,并让回调函数在执行该标志时立即返回该特定值 或者,您可以决定只运行XX次回调,而不再运行,或者暂停它们 如果您这样设置一个系统,您可以从一个地方控制具有多个异步回调的大型web应用程序的行为,这将为您提供很多灵活性和选项 为了帮助您做到这一点,您可以使用一个充当调度器的函数。每当您想要更改回调行为时,此函数将用作回调函数。您将传递普通回调函数作为参数进行调用,然后调度器将在决定是否继续正常回调之前检查正确的条件
这样,您就不需要检查回调函数内部的条件。这对于具有大量回调的大型应用程序尤其有用。我正在查看jQuery代码,但我真的看不到实现这一点的方法。为什么它们被分成两个呼叫?这里有多个回调有什么意义?为什么不将函数集成到第一个回调方法本身中呢?这是一个具有多个回调的更复杂系统的简化示例。使用“或尝试此”解决方案,但将标志添加到jqXHR对象中。在第一个成功处理程序中,我使用了
jqXHR.failed=true
,在第二个成功处理程序中,我使用了if(!jqXHR.failed)
()。。。通常你会选择给你答案的答案。。。。这实际上对未来的用户很有帮助。你因为提供了更多的信息而获得了答案。谢谢
var request = $.ajax({
url: '/echo/json'
});
second = true;
// First success handler
request.done(function(data, textStatus, jqXHR) {
console.log('first', jqXHR);
if ($.isEmptyObject(data)) {
second = false;
}
});
// Second success handler
request.done(function(data, textStatus, jqXHR) {
if(second)
console.log('second', jqXHR);
});