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