流水线化ajax http请求并仅在最新请求上执行成功功能

时间:2015-12-07 13:46:33

标签: javascript jquery ajax

我使用jquery ajax api来调用web方法,而success我正在实现showHideDomElement这样的功能。

function showHideDomElement(data) 
{
      if(data == 1 )
          $('#selector').show();
      else
          $('#selector').hide();
}

这就是我称呼它的方式

function Validatebatch() {
  $.ajax({
    type: "POST",
    url: getControllerURL("/Invoice") + "/ValidateBatch",
    data: {
      "Id": $('#someselector').val()
    },
    async: true, // i tried with 'false' but it affect performance
    dataType: "json",
    success: function(data) {
      showHideDomElement(data);
    }
  });
}

Validatebatch函数的ajax请求多次引发,因此有多个活动的http请求指向url在不同时间完成。

由于异步行为,success callback可以按不同的顺序执行。

完成的顺序正在产生问题。请建议一种方法,可以将ajax请求按照执行顺序绑定(请建议除jquery async属性以外的其他方式)

由于

1 个答案:

答案 0 :(得分:1)

首先,您必须重写Validatebatch函数,以便返回$ .ajax调用生成的Promise,例如:

sicp

然后你必须存储每个Validatebatch调用的promise并使用它来触发下一个Validatebatch只有在前一个完成之后,你应该有类似的东西:

function Validatebatch() {
  return $.ajax({