我有下一个问题给你。我的代码如下:
var data=[];
for(i=0;i<parametrTable.length;++i){
x = parametrTable[i];
(function(i) {
if(i==0){
$.getJSON("myurlwithparametr", function(json) {
$.each(json, function(j, d){
data.push({"column0": d.column, "count0": d.count});
});
});
}
else{
$.getJSON("myurlwithparametr", function(json) {
$.each(json, function(j, d){
data[j]["count"+i] = d.count});
});
}
})(i);
}
要提供数据&#39;数组加载从JSON&#39; a收到的个别值。我认为问题在于变量&#39; i&#39;循环,因为负载是异步的。你知道如何避免这种情况吗?
答案 0 :(得分:1)
这应该做你需要的。
var data=[];
parametrTable.forEach(function (x, i){
if(i==0) {
$.getJSON("/url/with/params?params", function(json) {
$.each(json, function(j, d) {
data.push({"column0": d.column, "count0": d.count});
});
});
}
else{
$.getJSON("myurlwithparametr", function(json) {
$.each(json, function(j, d){
data[j]["count"+i] = d.count
});
});
}
});
答案 1 :(得分:1)
这应该注意确保加载和处理第一个JSON,然后处理所有其他JSON(按任意顺序)
var data = [];
x = parametrTable[0];
$.getJSON("myurlwithparametr", function(json) { ... get first data
$.each(json, function(j, d) { // ... process first data
data.push({
"column0": d.column,
"count0": d.count
});
});
$.each(parametrTable, function(i, x) { // NOTE: x is now populated here
if (i) { // run from 1 ... end after 1st JSON is done
$.getJSON("myurlwithparametr", function(json) {
$.each(json, function(j, d) {
data[j]["count" + i] = d.count;
});
});
}
});
});
更好/更清洁的替代方案
var data = [];
$.each(parametrTable, function(i, x) { // NOTE: x = parametrTable[i]
$.getJSON("myurlwithparametr", function(json) {
$.each(json, function(j, d) {
data[j] = data[j] || {};
data[j]["count" + i] = d.count;
if (i == 0) {
data[j].column0 = d.column;
}
});
});
});
答案 2 :(得分:0)
这应该按顺序进行调用,也就是说,除非前一个调用完成,否则下一个调用将不会启动。您可能仍需要检查其他代码中的呼叫何时完成
var data=[];
getDataParametr(data, parametrTable, 0);
function getDataParametr(data, parametrTable, i){
x = parametrTable[i];
var url="myurlwithparametr";
$.getJSON(url, function(json) {
if(i==0){
$.each(json, function(j, d){data.push({"column0": d.column, "count0": d.count});});
} else {
$.each(json, function(j, d){data[j]["count"+i] = d.count});
}
if(++i<parametrTable.length){
getDataParametr(data, parametrTable, i);
}
});
}