我有以下JQuery:
$(document).ready(function() {
var names = ['item1', 'item2'];
var series1 = [{ name: '', data: []}];
var series2 = [{ name: '', data: []}];
var seriesCounter = 0;
....
renderCharts(url, otherUrl);
function renderCharts(url, otherUrl) {
if (otherUrl != '') {
$.each(names, function (i, name) {
$.getJSON('somurl', function (items) {
series1[i].name = name;
$.each(items.somedata, function (j, item) {
series1[i].data.push({
x: Date.parse(item.key),
y: item.value
})
});
seriesCounter++;
if (seriesCounter == names.length) {
... render chart once all data has been downloaded
}
});
});
}
$.getJSON(url, function (items) {
$.each(items.otherData, function (i, item) {
series2[0].data.push({
x: Date.parse(item.Key),
y: item.Value
})
});
// render other chart
});
}
}
我无法让这个工作。我每次运行时都不会输入以下条件:
if (seriesCounter == names.length) {
... render chart once all data has been downloaded
}
如果我在names数组中只有一个项目,那就可以了。在我添加两个的那一刻,条件永远不会成为现实,因此我的图表永远不会呈现。
我错过了什么?
答案 0 :(得分:2)
您的series1
变量被定义为一个数组,其中只包含一个元素(一个对象),但在$.each(names, function (i, name) {
循环中,您将其视为具有更多元素并尝试访问{ {1}} series1[i]
的值大于0.当i
为1时,您尝试执行i
但series1[1].name
未定义且没有{{1}属性。
您的脚本将在此时停止,因此未到达行series1[1]
。
我建议您将name
声明为空数组,然后在循环中根据需要添加新项:
if (seriesCounter == names.length) {
(你对series1
没有同样的问题,因为虽然你已经将它声明为数组,但你只能访问数组元素0.)
答案 1 :(得分:0)
错误在于:
var series1 = [{ name: '', data: []}];
var series2 = [{ name: '', data: []}];
...
series1[i].name = name;
series1永远不会被赋予额外的对象,所以在第二次迭代中,它尝试访问series[1]