Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在多次AJAX调用后暂停AJAX回调的执行_Javascript_Ajax - Fatal编程技术网

Javascript 在多次AJAX调用后暂停AJAX回调的执行

Javascript 在多次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(

我的脚本中有2个Ajax调用,每个调用都有一个不同的回调来执行on call success

$.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,这正是我想要的。