我构建了一个内部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>');
}
});
}
答案 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之后逐个调用。)。 或者您可以使用递归函数,在触发成功函数后再次调用自身。