javascript - 控制 AJAX 请求

标签 javascript jquery ajax

是否有办法停止额外的 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>

关于javascript - 控制 AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479116/

相关文章:

带有 HTTP POST 的 Android JSON ajaxQuery

javascript - SignalR 和 Sammy.js 在 IE 中的错误行为

jquery - javascript 捕获浏览器快捷键 (ctrl+t/n/w)

javascript - FullCalendar,将事件背景颜色应用于事件限制弹出窗口?

javascript - 检测 Javascript 何时表现不佳

javascript - 希望我的表在新内容添加到数据库时刷新

javascript - Angular - 使用 ng-click 后 Controller 刷新

javascript - 我们是否在 webaudio 中使用 createMediaStreamSource 获取所有数据?

Javascript - 创建返回参数列表的柯里化(Currying)函数

php - 已弃用的 Ajax 或 JQuery 命令导致无结果返回