Javascript 在多次AJAX调用后暂停AJAX回调的执行
我的脚本中有2个Ajax调用,每个调用都有一个不同的回调来执行on call successJavascript 在多次AJAX调用后暂停AJAX回调的执行,javascript,ajax,Javascript,Ajax,我的脚本中有2个Ajax调用,每个调用都有一个不同的回调来执行on call success $.ajax({ type: 'POST', url: "url1", success: foo1 }); $.ajax({ type: 'POST', url: "url2", success: foo2 }); 我还有另一个函数,Clear(),我希望在所有ajax调用返回后激活它,但我不希望回调(foo1和foo2)将一直执行到我执行Clear(
$.ajax({
type: 'POST',
url: "url1",
success: foo1
});
$.ajax({
type: 'POST',
url: "url2",
success: foo2
});
我还有另一个函数,Clear()
,我希望在所有ajax调用返回后激活它,但我不希望回调(foo1
和foo2
)将一直执行到我执行Clear()
我一直在寻找答案,但没有找到明确的答案。我能做些什么来解决这个问题?是否有处理此类问题的标志或函数?提前感谢。您可以实现一个简单而简单的解决方案,如下所示,或者如果您需要一个更强大的解决方案,请查看
var foo1Data, foo2Data;
$.ajax({
type: 'POST',
url: "url1",
success: function(data) {
if (foo2Data) {
Clear();
foo1(data);
foo2(foo2Data);
}
else {
foo1Data = data;
}
}
});
$.ajax({
type: 'POST',
url: "url2",
success: function(data) {
if (foo1Data) {
Clear();
foo1(foo1Data);
foo2(data);
}
else {
foo2Data = data;
}
}
});
未经测试,但您可以在时使用
尝试类似的操作
// each object in responses contains the response text,
// status, and jqXHR object for each ajax call
function clear(responses) {
// do something
foo1(responses[0]);
foo2(responses[1]);
};
$.when(ajax1, ajax2).done(clear);
我不确定我是否同意这些现有的解决方案中的任何一个,因为JQuery为我们提供了一个用于此目的的工具:$
当使用$时,JQuery将所有承诺聚合为一个承诺,并且仅当所有承诺都已解决时才解决。如果任何承诺被拒绝,则调用失败
const promise1 = $.Deferred();
const promise2 = $.Deferred();
promise1.resolve({data: 'Promise 1'});
promise2.resolve({data: 'Promise 2'});
$.when.apply(this, [promise1, promise2])
.done((promise1Data, promise2Data) => {
// All of our promises have resolved
// And we have all our data from each promise
// Do the work of clear() here
console.log(promise1Data.data)
console.log(promise2Data.data)
})
.fail((error) => {
console.error('One or more promises failed')
});
正如我们所看到的,在这个问题的上下文中,您可以在$的done
中执行任何必要的逻辑。如果你达到了这一点,你可以保证所有的承诺都已经解决了
上述代码块将以下内容输出到控制台
> "Promise 1"
> "Promise 2"
工作示例:如果您执行ajax调用#1,并且成功调用ajax#2,是否可以?是的,foo1()
和foo2()
的执行顺序并不重要。重要的是执行前将调用Clear()
。您正在查找$。当时,请参阅我的答案。如果AJAX调用return data,则else
语句还需要将返回的数据存储在外部变量中,以便另一个变量使用。我不确定Clear()
的作用,但是OP可能希望它在调用foo
之前运行。或者这个解决方案甚至消除了对Clear()
的需求@4castle是对的,我对来自Ajax响应的foo1()
和foo2
有不同的数据。。。我不能在同一范围内执行它们。好的,值得一试。。。例如,如何访问响应[0]中的数据?responses[0]。我想是responseText
吧。谢谢!我不熟悉JavaScript和jQuery,这正是我想要的。