5

这是我的第一篇文章,但我很高兴能加入这个社区。我有一个关于 JavaScript 的问题,我完全被难住了。

我正在编写一个 JavaScript 应用程序,它使用 ajax 从服务器中提取数据并将其添加到图表中。我使用 Jquery 和 Highcharts 作为框架,然后围绕 Highcharts 编写我自己的 JavaScript“包装器”来生成界面。

当使用 jSON 响应回调 processData 函数时,它以 i=1 开始,即使 i 甚至不应该被初始化甚至声明。其他变量也被设置。(我通过使用 chrome 开发人员工具进行调试知道这一点)。这使我的循环无法执行,并且我的任何数据都不会添加到图表中。

我不知道要显示多少代码,但这些是最相关的部分。如果需要,我可以添加更多。

function getData(series, min, max, numpts) {
        if (series === undefined) {
            console.log("error on getData");
            return;
        }

        var request = {};
        request.series = series;

        if (min !== undefined) {
            request.start = min;
        } //in seconds
        if (max !== undefined) {
            request.end = max;
        } 
        if (numpts !== undefined) {
            request.numpts = numpts;
        }
        $.getJSON('/data', request, processData);
        return;
    }

    function processData(data) {
        // handle the data after it comes back from an ajax request
        var curSeries,
            chartSeries,
            curPoint;

        for (var i = 0; i < data.length; i ++) {
            curSeries = data[i];
            chartSeries = chart.get(curSeries.name);

            if (chartSeries === null) {
                //alert("oops");
                chart.addSeries(curSeries);
            } else {
                for (var j = 0; j < curSeries.data.length; j ++) {
                    curPoint = curSeries.data[j];
                    chartSeries.addPoint(curPoint, false);
                }
            }
        }
        chart.redraw();
    }

这两种方法都是我声明的名为 graph 的类的方法。

谢谢,如果有人有任何想法!-马特 P

4

1 回答 1

2

我会通过控制台检查您的数据对象以确保它是您所期望的,因为即使预先声明了i ,该循环也应该可以正常工作:无论如何,您在循环开始时将 0 分配给它。

我能想到在你定义和初始化它之前会被定义和初始化的唯一原因是如果你的代码库中的其他地方你没有用var关键字初始化i 。这样做会将其转储到全局范围(窗口对象)中,通过对代码库中的任何和每个函数的闭包使其可用。

如果它不在您的某个文件中,它可能在 highcharts 图形库中(在这种情况下,从所述库中运行得非常快)。

于 2010-07-24T17:17:17.190 回答