我正在使用jQuery 1.5.2并且在Ajax请求中注册了多个成功回调。在第一次成功回调中,我需要检查响应是否包含我需要的所有数据,如果没有则取消所有后续成功回调。
注意: 我无法访问服务器发送的标头。它始终发送200 Success
。
第二个注意: 我不能只合并两个回调。这是一个问题的简化示例,我在一个更大的系统中注册了代码中不同位置的回调。
如何取消后续成功回调?
一些示例代码如下所示(jsfiddle):
var request = $.ajax({
url: '/echo/json'
});
// First success handler
request.done(function(data, textStatus, jqXHR) {
console.log('first', jqXHR);
if ($.isEmptyObject(data)) {
// I want to cancel the second success handler here!
}
});
// Second success handler
request.done(function(data, textStatus, jqXHR) {
console.log('second', jqXHR);
});
谢谢!
答案 0 :(得分:0)
刚刚合并。
// 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);
});
答案 1 :(得分:0)
在你的回调函数中,你应该做的第一件事就是检查一个状态变量(或'flag'),它会在给定当前情况的情况下通知函数它是否可以执行。
不希望回调再次执行?将标志设置为某个值,如果该标志在执行时具有该特定值,则让回调函数立即返回。
或者您可以决定只运行XX回调而不是暂停,或者只是暂停它们。
如果您设置这样的系统,您可以从一个地方控制具有多个异步回调的大型Web应用程序的行为,它将为您提供很多灵活性和选项。
为了帮助您,您可以拥有充当调度员的功能。每次要更改回调的行为时,此函数将用作回调函数。您将传递正常的回调函数作为参数调用,然后调度程序将在决定是否继续正常回调之前检查正确的条件。
这样您就不需要在回调函数内部检查条件。它对于具有很多回调的大型应用程序特别有用。