jQuery:AJAX请求多次触发,直到响应成功使用$ .Deferreds

时间:2015-01-13 18:11:59

标签: javascript jquery ajax jquery-deferred

问题!

在尝试执行一组AJAX请求时,大多数时候至少有一个请求总是得到一个挂起的响应,这会导致请求循环,直到它获得成功的响应。请注意我使用jQuery.when,这样我就可以确保两个请求都已执行。

上述行为导致:

  • 对同一来源的多个请求
  • jQuery.always执行次数与执行请求相同
  • 由于对DOM的多次更新,界面崩溃。

实施例

var request = [];

request.push(getProductPrice().done(
  function(price) {
    updateProductPrice(price);
  }
);

request.push(getProductInfo().done(
  function(information) {
    updateProductInformation(information);
  }
);

jQuery.when.apply(undefined, request).always(function() {
  doSomeStuff1();
  doSomeStuff2();

  ...
  ...
  ...

  doSomeStuffN();
});


function updateProductPrice(obj) {
  return jQuery.get(...);
}

function updateProductInformation(obj) {
  return jQuery.get(...);
}

问题?

  • 我有什么原因可以收到待处理的回复吗?
  • 问题是jQuery.when尝试释放AJAX请求以启动回调吗?

事实

  • 如果我通过同步向上述来源提出请求,我将永远不会收到待处理的响应。我只是想避免使用async: false

更新#1

通过挂起状态,我的意思是网络浏览器对我的请求给出的响应,这只是ajax调用等待它的响应。主要问题在于如何处理这些AJAX请求,我注意到函数updateProdcutPrice()updateProductInformation()被调用N次,直到服务器的响应成功,这导致函数在.always()的回调中声明了在updateProdcutPrice()updateProductInformation()上执行的请求也被多次调用。

0 个答案:

没有答案