我有一个用于循环,超过一个关联数组迭代。 foreach条目我必须做一个ajax请求,并用检索的数据填充另一个数组。
问题是成功回调是异步的,所以它只有在循环迭代后才运行。这意味着我的数据数组充满了最后一个Ajax请求结果的多个副本。 这是我的代码(简化):等待AJAX成功结束才去槽下一迭代
var channels = {
"misured": "channel_misured",
"plan": "channel_plan"
};
var data; //Initial data is empty
function getData() {
data = new Array();
for (var seriesData in channels) {
var currentData = new Array();
$.ajax({
type: "GET",
url: 'http://' + serverAddress + ':' + serverPort + '/GetChannelBufferAsJsonp?channelName=' + channels[seriesData] + '&callback=?',
dataType: "json",
async: false,
success: function (json) {
var time = new Date().getTime() + 3600000;
for (var i = 0; i < json.length; i++) {
currentData.push({
x: time + i * 30000,
y: json[i]
});
}
data.push({
id: seriesData,
name: "Production " + seriesData,
data: currentData
});
}, error: function() {
console.log("error", this);
}
});
}
}
所以数据有2个元素(正确的),但他们都来自于“plan_channel”(这是我的数据源)。 我知道这是一个经典,众所周知的“问题”(或功能)的Ajax请求,但我不明白我可以摆脱它。
你可以告诉如何等待成功回调才能结束,然后再进行下一次迭代?
非常感谢
如果我明白你的问题,为什么不使用一个全局标志/布尔你的Ajax请求启动时控制? – FiveTools 2012-02-13 14:54:57
做异步:假不工作? – 2012-02-13 14:55:47
而不是将数据推入数组为什么不用数据清除数组? – Eli 2012-02-13 14:57:55