这是困扰我的事。我的代码在document.ready
上运行。我需要异步请求,这意味着async: true
for (var i = 0; i < totalGraphs; i++) {
var kpiId = kpiIds[i];
jQuery.ajax({
type: 'POST',
url: graphUrl,
data: "kpiId="+kpiId+"&divId="+(i+1),
async: true, //if false things are working fine
cache:false,
success: function(response){
document.getDocumentById("graph" + (i + 1)).innerHTML("hello");
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
}
});
}
这个请求没有在我的graphX div中打招呼,但每当我把async: false
的东西都运行正常。我真的需要异步请求。
提前感谢您的帮助。
答案 0 :(得分:4)
我猜测返回成功时,i
计数会在循环中混乱。 <{1}}将在循环运行后返回,因此会产生意外结果。
您是否可以返回success
i
中发送的data
值,然后在response
方法中使用此值?我猜这会解决你的问题。
尝试新代码:
getDocumentById
答案 1 :(得分:4)
试试这个......
for (var i = 0; i < totalGraphs; i++){
(function ajaxCall(index) {
var kpiId = kpiIds[index];
jQuery.ajax({
type: "POST",
url: graphUrl,
data: {
kpiId : kpiId,
divId : index + 1
},
async: true, //if false things are working fine
cache: false,
success: function(response) {
document.getDocumentById("graph" + (index + 1)).innerHTML("hello");
},
error: function(XMLHttpRequest,textStatus,errorThrown) {}
});
})(i);
}
我已经在匿名函数中包装了ajax调用,因此相对于ajax调用,i
的值永远不会改变。
答案 2 :(得分:1)
首先,您在循环内运行ajax调用。如果您关闭了异步,这将没问题。但是由于你打开了异步,循环不会等待ajax完成它的工作。
最好的办法是使用内部循环ajax将值传递给全局变量,然后使用该变量稍后绘制图形。