JavaScript方法开始时分配了变量??非常困惑
这是我的第一篇帖子,但我很高兴加入这个社区。我有一个关于JavaScript的问题,对此我完全感到困惑 我正在编写一个JavaScript应用程序,它使用ajax从服务器提取数据并将其添加到图表中。我使用Jquery和Highcharts作为框架,然后围绕Highcharts编写自己的JavaScript“包装器”来生成接口 当processData函数被jSON响应回调时,它以i=1开始,尽管我甚至不应该被初始化或声明。还设置了其他变量。(我通过使用chrome开发者工具进行调试了解到这一点)。这使得我的循环无法执行,并且我的任何数据都不会添加到图表中 我不知道要显示多少代码,但这些是最相关的部分。如果需要,我可以添加更多JavaScript方法开始时分配了变量??非常困惑,javascript,ajax,jquery,highcharts,Javascript,Ajax,Jquery,Highcharts,这是我的第一篇帖子,但我很高兴加入这个社区。我有一个关于JavaScript的问题,对此我完全感到困惑 我正在编写一个JavaScript应用程序,它使用ajax从服务器提取数据并将其添加到图表中。我使用Jquery和Highcharts作为框架,然后围绕Highcharts编写自己的JavaScript“包装器”来生成接口 当processData函数被jSON响应回调时,它以i=1开始,尽管我甚至不应该被初始化或声明。还设置了其他变量。(我通过使用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();
}
函数getData(系列、最小值、最大值、numpts){
如果(系列===未定义){
log(“getData上的错误”);
返回;
}
var请求={};
request.series=系列;
如果(最小!==未定义){
request.start=min;
}//以秒为单位
如果(最大!==未定义){
request.end=max;
}
如果(numpts!==未定义){
request.numpts=numpts;
}
$.getJSON('/data',request,processData);
返回;
}
函数processData(数据){
//处理从ajax请求返回的数据
var curSeries,
图表系列,
凝乳点;
对于(变量i=0;i-Matt P
我会检查您的数据对象,以确保它符合您的预期,因为即使我预先声明了,该循环也应该可以正常工作:无论如何,您在循环开始时为它指定了0
我能想到的唯一原因是,在定义和初始化之前,如果在代码库中的其他地方没有使用var关键字初始化I,那么我就会被定义和初始化。这样做会将其转储到全局范围(窗口对象),通过关闭代码库中的任何函数使其可用如果它不在您的某个文件中,则可能在highcharts图形库中(在这种情况下,从所述库中快速运行)。
i
永远不会以1开头。循环不会执行的唯一方法是data.length==0。执行processData
顶部的alert(data.length)
并进行检查。jQuery库也可能将变量泄漏到全局范围,尽管通常它的范围非常好。不管怎样,正如你所说,这不重要。Javascript几十年来一直使用大量的全局变量,直到最近范围界定的知识才被广泛传播。所以我一直在使用chromes调试器,我知道它已经初始化了。。。然而,我通过jslint运行了我的代码,并清理了一些东西,主要是空格和遗漏的东西;突然间,它停止了这样做。。。我不知道为什么,因为在这个函数附近没有什么变化。我也认为这可能是chrome的问题。在此之前,我已经在同一个选项卡上运行了一段时间,我可能只是不知何故损坏了控制台:(