jQuery AJAX请求之间的时间延迟

时间:2011-08-08 17:10:47

标签: javascript jquery settimeout

我构建了一个内部Web应用程序来查找区号。我遇到的问题是我有很多区号要经过。这么多,以至于我的应用程序开始出错了。

我想在其中构建一个计时器,以便每隔一秒左右触发一个请求,直到我的数组结束。有什么想法吗?

var phoneList = ["905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX",...];
var phoneList_length = phoneList.length;
for(i=0; i < phoneList_length; i++){    
    $.ajax({
        url: 'http://mysite.com/webservice.php',
        dataType: 'jsonp',
        data: 'number=' + phoneList[i] + '&index=' + i,
        type: 'GET',
        timeout: 10000,
        success: function(data){
            $('.phoneReults').append('<li>' + phoneList[data.index] + '</li>');
            $('.stateReults').append('<li>' + data.region +'</li>');
            $('.cityReults').append('<li>' + data.city +'</li>');
        }
    });
}

5 个答案:

答案 0 :(得分:4)

function fire(request, i) {
    var phone = request.shift();
    $.ajax({
        url: 'http://mysite.com/webservice.php',
        dataType: 'jsonp',
        data: 'number=' + phone + '&index='  + i,
        etc: ...
    });
    if (request.length > 0)
        setTimeout(fire, 1000, request, ++i);
}

...
// start requests
fire(phoneLists, 0);

答案 1 :(得分:1)

var phoneList = ["905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX",...];
var time = 1000;
$.each(phoneList, function(index, phone) {
    window.setTimeout(function() {
        $.ajax({
            url: 'http://mysite.com/webservice.php',
            dataType: 'jsonp',
            data: { number: phone, index: index },
            success: function() {
                ...                  
            }  
        });
    }, time);
    time += 1000;
});

答案 2 :(得分:0)

您最好触发整个阵列的请求。这将为您节省大量的请求以及服务器端的大量初始化和最终确定。如果数组非常大,您可以选择发送它的块(一次10个或100个)。

如果之后仍需要数组,则可以跳过for循环。相反,创建一个在请求的succes处理程序中调用自身的函数。重复此操作,直到全局变量到达数组的末尾。

答案 3 :(得分:0)

试试这个

var phoneList = ["905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX","905XXXXXXX",...];
var phoneList_length = phoneList.length;

var count = 0;

var timer = setInterval(function(){
  if(count != phoneList_length){
    SendPhoneList(phoneList[count]);
    count++;
  }
  else{
     clearInterval(timer);
  }
}, 1000);


function SendPhoneList(phoneList){
  $.ajax({
        url: 'http://example.com/webservice.php',
        dataType: 'jsonp',
        data: 'number=' + phoneList + '&index=' + i,
        type: 'GET',
        timeout: 10000,
        success: function(data){
            $('.phoneReults').append('<li>' + phoneList[data.index] + '</li>');
            $('.stateReults').append('<li>' + data.region +'</li>');
            $('.cityReults').append('<li>' + data.city +'</li>');
        }
    });
}

答案 4 :(得分:0)

你可以有一个ajax请求数组来进行串行ajax调用(你可以在之前的on之后逐个调用。)。 或者您可以使用递归函数,在触发成功函数后再次调用自身。