【问题标题】:JavaScript method begins w/ variables assigned?? very confusedJavaScript 方法以分配的/变量开头??很混乱
【发布时间】:2023-04-03 16:07:01
【问题描述】:

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

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

当 processData 函数被 jSON 响应回调时,它以 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

【问题讨论】:

  • i 永远不会以 1 开头。循环不会执行的唯一方法是 data.length == 0。在 processData 的顶部执行 alert(data.length) 并检查。跨度>

标签: javascript ajax jquery highcharts


【解决方案1】:

我会通过控制台检查您的数据对象以确保它符合您的预期,因为即使 i 已预先声明,该循环也应该可以正常工作:您在无论如何,循环的开始。

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

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

【讨论】:

  • jQuery 库也有可能将变量泄漏到全局范围,尽管通常它的范围很好。无论如何,正如你所说,这应该不重要。几十年来,Javascript 一直使用大量的全局变量,直到最近才广泛传播范围知识。
  • 所以我一直在使用 chromes 调试器,而我是如何知道它已经初始化的......但是,我通过 jslint 运行我的代码并清理了一些东西,主要是间距和东西以及缺失的东西;突然之间,它停止了这样做……我不知道为什么,因为该功能附近没有真正改变。我也认为这可能是 chrome 问题。在那之前我已经在同一个选项卡中操作了一段时间,我可能只是以某种方式损坏了控制台。 :(
猜你喜欢
  • 1970-01-01
  • 2016-10-04
  • 2020-07-01
  • 1970-01-01
  • 2012-04-03
  • 2021-07-17
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多