jQuery等到函数结束然后再做一次

时间:2013-11-01 17:36:47

标签: javascript jquery

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个请求,所以我的问题是,如何在第一次循环完成时延迟它...移动到第二个循环。

谢谢

2 个答案:

答案 0 :(得分:4)

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

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);

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

答案 1 :(得分: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
        }
    });}
}