2011-08-08 32 views
0

私は、エリアコード番号を検索する小さな内部Webアプリケーションを構築しています。私が走っている問題は、私が通過するエリアコードがたくさんあることです。あまりにも私のアプリが誤って開始するように。jQuery AJAXリクエストの間の遅延時間

タイマーを作成して、1秒ごとにリクエストを発信して、配列の最後まで実行したいと考えています。何か案は?

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ループをスキップできます。代わりに、要求のsuccesハンドラで自身を呼び出す関数を作成します。グローバル変数が配列の終わりに達するまでこれを繰り返します。

0

あなたはシリアルAJAX呼び出しを(以前には成功した後、あなたは一つ一つを呼び出すことができます。)持っているAJAXリクエストの配列を持つことができ、この

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

を試してみてください。 成功関数がトリガされた後、自分自身を再度呼び出す再帰関数を持つことができます。

関連する問題