我有一個用於循環,超過一個關聯數組迭代。 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