当前位置: 代码迷 >> JavaScript >> 控制AJAX请求
  详细解决方案

控制AJAX请求

热度:97   发布时间:2023-06-13 11:39:23.0

无论如何,是否要停止其他AJAX请求并一次触发一个? 我有一个打印应用程序,因此在继续下一个请求之前,我需要处理每个请求。 在我的代码中,我有一个平均循环约15次的循环,这将使AJAX每次迭代都调用并处理响应$.when()准备就绪。 问题在于每个响应都在返回时得到处理,而不是在前一个响应完成时进行处理。 我实际上是在尝试避免使我的呼叫同步,但是是否有一次可以一次处理这些响应?

是的,将promise存储在原始数组中,然后再次遍历原始数组以传递给$ .when。 回调将按顺序排列参数。

var myData = [
  {
    name: 'apple',
    color: 'red'
  },
  {
    name: 'orange',
    color: 'orange'
  }
];

myData.forEach(function (obj) {
  obj.promise = $.get('/object-info', obj);
});

$.when.apply($, myData.map(function (obj) {
  return obj.promise;
})).then(function () {
  var args = Array.prototype.slice.call(arguments);
  args.forEach(function (result) {
    console.log(result); // results in order
  })
});

 // *** MOCK $.get = function (url, data) { var defer = $.Deferred() setTimeout(function () { defer.resolve(data.color); }, 1500); return defer.promise(); }; // *** END MOCK var myData = [ { name: 'apple', color: 'red' }, { name: 'orange', color: 'orange' } ]; myData.forEach(function (obj) { obj.promise = $.get('/object-info', obj); }); $.when.apply($, myData.map(function (obj) { return obj.promise; })).then(function () { var args = Array.prototype.slice.call(arguments); args.forEach(function (result) { console.log(result); // results in order }) }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

  相关解决方案