2011-08-08 65 views
0

我構建了一個查找區號的小內部Web應用程序。我遇到的問題是我有很多區號可以通過。太多以至於我的應用程序開始出錯。jQuery AJAX請求之間的時間延遲

我想建立一個計時器,讓我每隔一秒就發出一個請求,直到我的數組結束。有任何想法嗎?

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

回答

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

感謝喬伊,作品的魅力! – Smccullough

0

您最好啓動整個陣列的請求。這將爲您節省大量的請求,並在服務器端進行大量初始化和最終化處理。如果數組非常大,您可以選擇發送數據塊(例如,每次10或100個)。

如果您之後仍然需要該數組,您可以跳過for循環。相反,請在請求的成功處理程序中調用自己的函數。重複此操作,直到全局變量到達數組的末尾。

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>'); 
     } 
    }); 
} 
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; 
}); 
0

你可以有一個陣列Ajax請求有一個串行Ajax調用(你也可以在以前的上成功調用一個接一個。)。 或者您可以使用遞歸函數,在成功函數觸發後再次調用自身。