2
var repeat = 5;

for (var i = 0; i < repeat.length; ++i)
{
    $.ajax({
        type: 'POST',
        headers: { "cache-control": "no-cache" },
        url: baseUri + '?rand=' + new Date().getTime(),
        async: true,
        cache: false,
        dataType : "json",
        data: 'something_to_post=1234'),
        success: function(jsonData,textStatus,jqXHR)
        {
            //some functions
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            //some alert code
        }
    });
}

所以这个循环将重复 2 次并同时发出 2 个请求,所以我的问题是,当第一个循环完成时,我该如何延迟它......移至第二个循环。

谢谢

4

2 回答 2

4

您必须考虑回调。您有一项任务 - 进行 AJAX 调用 - 并且您想在 AJAX 调用完成后再次执行此操作。将任务放入一个函数中,然后从successAJAX 调用的回调中调用该函数。要跟踪重复次数,请将其作为显式变量传递给函数:

function makeCalls(numCalls) {
    if (numCalls <= 0) {
        return;
    }
    $.ajax({
        type: 'POST',
        headers: { "cache-control": "no-cache" },
        url: baseUri + '?rand=' + new Date().getTime(),
        async: true,
        cache: false,
        dataType : "json",
        data: 'something_to_post=1234'),
        success: function(jsonData,textStatus,jqXHR)
        {
            //some functions

            //make the next call
            makeCalls(numCalls - 1);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            //some alert code
        }
    });
}
makeCalls(5);

我在这里写的方式,如果出现错误,它不会进行下一次调用,但在这种情况下你想做什么取决于你。

于 2013-11-01T17:41:17.600 回答
0

使用递归函数。

function callme(){
if(i<5){
    $.ajax({
        type: 'POST',
        headers: { "cache-control": "no-cache" },
        url: baseUri + '?rand=' + new Date().getTime(),
        async: true,
        cache: false,
        dataType : "json",
        data: 'something_to_post=1234'),
        success: function(jsonData,textStatus,jqXHR)
        {
            callme();
i++;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            //some alert code
        }
    });}
}
于 2013-11-01T17:44:03.300 回答