如何设置发出请求的条件延迟?

时间:2014-05-13 21:41:49

标签: javascript jquery ajax

我有一个符号数组,如下所示。 对于数组的每个元素,我正在发出Ajax请求。

var symbols = ["SSS", "SEE"]

$(document).ready(function () {
    $.each(symbols, function (index, value) {
        loadXMLDoc(value);
    });
});

function loadXMLDoc(value) {
    $.ajax({
        type: 'POST',
        url: 'https://ganaga/aaaa/sss',
        success: function (data) {}
    }

在浏览器控制台中,我看到许多XHR请求处于暂挂状态。 是否可以仅在获取前一个数组元素的响应时才生成下一个Ajax请求?

3 个答案:

答案 0 :(得分:2)

我只想使用一点递归:

var symbols = ["SSS", "SEE"]

$(document).ready(function () {
    loadXMLDoc(0);
});

function loadXMLDoc(idx) {
    value = symbols[idx];
    if (value) {
        $.ajax({
            type: 'POST',
            url: 'https://ganaga/aaaa/' + value,
            success: function (data) {
                //...
                loadXMLDoc(idx+1);
            }
        });
    }
}

答案 1 :(得分:2)

在回调函数中调用下一个AJAX调用。

function loadXMLDoc(n) {
    var value = symbols[n];
    $.ajax({
        type: 'POST',
        url: 'https://ganaga/aaaa/sss',
        success: function (data) {
            if (n < symbols.length-1) {
                loadXMLDoc(n+1);
            }
        }
    }
}

以:

开头
loadXMLDoc(0);

答案 2 :(得分:2)

var symbols = ["SSS", "SEE"]

$(document).ready(function () {
   loadXMLDoc(symbols);
});

function loadXMLDoc(symbols) {
   if(symbols[0]) {
      $.ajax({
        type: 'POST',
        url: 'https://ganaga/aaaa/sss',
        success: function(data){ loadXMLDoc(symbols.slice(1)) }
      });
   }
}

我的问题中value没有使用loadXMLDoc,我想你想要:

        url: 'https://ganaga/aaaa/'+ symbols[0],

另外,我会将功能重命名为loadXMLDocs