Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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请求后执行函数_Javascript_Jquery - Fatal编程技术网

Javascript 在多次ajax请求后执行函数

Javascript 在多次ajax请求后执行函数,javascript,jquery,Javascript,Jquery,我试图在6次ajax调用后执行一个函数(每次调用后都保留“.done”部分) 我试过使用$。when,但似乎没有达到我想要的效果 编辑: 我已经包括了一个全局计数器和函数,在所有调用都必须压缩一些创建的文件之后,是否有必要将超时设置为等待,或者是$。什么时候足够 function zipAll(){ $.ajax({ method: "POST", url: "zipAll.php", }).done(functio

我试图在6次ajax调用后执行一个函数(每次调用后都保留“.done”部分)

我试过使用$。when,但似乎没有达到我想要的效果

编辑: 我已经包括了一个全局计数器和函数,在所有调用都必须压缩一些创建的文件之后,是否有必要将超时设置为等待,或者是$。什么时候足够

function zipAll(){
    $.ajax({
      method: "POST",
      url: "zipAll.php",
    }).done(function(){
    window.location = "uptimeReports.zip";
    console.log("hola");
    });
}

$.ajax
返回类似承诺的对象。当时,将(所有6个)输入到
$。另外,不要使用
.done
而是
.then
以保持一致性,因为承诺使用
。then

function showReports(array_monitor){
  return $.ajax(...).then(function(xml){
    // Do some parsing
    return finalValue;
  });
}

$.when.apply(null, [
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
]).then(function(result1, result2,...){
  // All done
});

还要确保从
showReports
返回一个值,然后返回
回调。它是promise的解析值,它成为传递到
$中的值。当
$时。ajax
返回类似promise的对象。当
时,将(所有6个)输入到
$。另外,不要使用
.done
而是
.then
以保持一致性,因为承诺使用
。then

function showReports(array_monitor){
  return $.ajax(...).then(function(xml){
    // Do some parsing
    return finalValue;
  });
}

$.when.apply(null, [
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
  showReports(...),
]).then(function(result1, result2,...){
  // All done
});

还要确保从
showReports
返回一个值,然后返回
回调。它是承诺的解析值,成为传递到
$中的值。当
时,您可以使用jQuery方法
$。当
时。每个jQuery ajax调用都返回promise,当您调用
$时。当
处理所有这些承诺时,您的回调将在解决所有这些承诺后被调用:

var xhr1 = $.ajax({ dataType: "json", url: '' });
var xhr2 = $.ajax({ dataType: "json", url: '' });
// etc ...

$.when(xhr1, xhr2, ...).then(function(xhr1Result, xhr2Result, ...) {
   // You've got your results
});

您可以使用jQuery方法
$。每个jQuery ajax调用都返回promise,当您调用
$时。当
处理所有这些承诺时,您的回调将在解决所有这些承诺后被调用:

var xhr1 = $.ajax({ dataType: "json", url: '' });
var xhr2 = $.ajax({ dataType: "json", url: '' });
// etc ...

$.when(xhr1, xhr2, ...).then(function(xhr1Result, xhr2Result, ...) {
   // You've got your results
});

存储在
done
回调中递增的计数器。当它达到6时,执行你的函数。@Igor它不需要是全局计数器,它可以是本地的。我也试过了,这似乎是有道理的,但在所有ajax请求之后我必须调用的函数必须压缩在.rar中之前创建的所有csv,并且我在最后一次调用中收到一个错误,尽管所有文件都正确添加了。
done
回调中增加的存储计数器的可能副本。当它达到6时,执行你的函数。@Igor它不需要是全局计数器,它可以是本地的。我也试过了,这似乎是有道理的,但在所有ajax请求之后我必须调用的函数必须在.rar中压缩之前创建的所有csv,并且我在最后一次调用中收到一个错误,尽管所有文件都正确添加了可能的副本