数组内有多个getJSON请求

时间:2012-03-01 21:57:14

标签: jquery

我有以下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数组中只有一个项目,那就可以了。在我添加两个的那一刻,条件永远不会成为现实,因此我的图表永远不会呈现。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您的series1变量被定义为一个数组,其中只包含一个元素(一个对象),但在$.each(names, function (i, name) {循环中,您将其视为具有更多元素并尝试访问{ {1}} series1[i]的值大于0.当i为1时,您尝试执行iseries1[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]

处的未定义数组值