好吧,我有一个" ID"我需要为每个" ID"发送一个Ajax请求。 ides是当请求完成时,运行以下Ajax请求。 所有这些都是异步请求,否则,浏览器实际上是#34;停止"直到请求完成加载。
逻辑非常简单: 我们在循环中创建一个循环,并根据ID创建一个Ajax请求asinconica。 问题是异步Ajax请求阻止我访问全局变量ID。
示例:
// This list will always have 40 items/values.
var ids = [12,3453,234,743,235,433, ..];
for (var index = 0; index < ids.length; index++) {
// This request take long time( 40-60 seconds)
$.ajax({
url : 'http://website.com/id=' + ids[index], // See here how to call to global variable ids
success : function (response) {
// And here, i call the element '#element' and get and set the 'value text'
var currentTotal = parseInt($('#element').text());
$'#element').text(currentTotal + response.total);
},
async:true // See here, this is a Async request
});
}
请注意,每个请求必须在上一次完成加载后发送,并且始终是动态列表,因为有时我必须发送不同的ID。
答案 0 :(得分:2)
你可以试试。我已经删除了for循环,并且只有在上一次调用成功后才会增加索引,从而启动下一个调用。
// This list will always have 40 items/values.
var ids = [12,3453,234,743,235,433, ..];
var index = 0;
RequestAjax(ids,index);
function RequestAjax(ids,index)
{
if(ids.length > index)
{
// This request take long time( 40-60 seconds)
$.ajax({
url : 'http://website.com/id=' + ids[index], // See here how to call to global variable ids
success : function (response) {
// And here, i call the element '#element' and get and set the 'value text'
var currentTotal = parseInt($('#element').text());
$'#element').text(currentTotal + response.total);
RequestAjax(ids,index++);
},
async:true // See here, this is a Async request
});
}
}
答案 1 :(得分:1)
我认为DinoMyte的答案很有用。
根据@ DinoMyte的回答,您还可以使用.push()
和.shift()
来操纵数组ids
。
// This list will always have 40 items/values.
var ids = [];
Manipulate([12,3453,234,743,235,433]);
function RequestAjax()
{
if(ids.length > 0)
{
var id = ids.shift();
// This request take long time( 40-60 seconds)
$.ajax({
url : 'http://website.com/id=' + id,
success : function (response) {
// And here, i call the element '#element' and get and set the 'value text'
var currentTotal = parseInt($('#element').text());
$'#element').text(currentTotal + response.total);
RequestAjax();
},
async:true // See here, this is a Async request
});
}
}
function Manipulate(id)
{
var shouldRequest = false;
if(0 === ids.length){
shouldRequest = true;
}
if(toString.apply(id) === '[object Array]'){
ids = ids.concat(id);
}else if('number' === typeof id){
ids.push(id);
}
if(shouldRequest === true && ids.length > 0){
RequestAjax();
}
}