Javascript jQuery每个都超出了函数的范围

Javascript jQuery每个都超出了函数的范围,javascript,jquery,jqplot,Javascript,Jquery,Jqplot,我有一个图表,我想在上面添加链接,我想我找到了一种方法,使用一个数组,比如[[1,2,http://google.com]],[[2,3,http://yahoo.com]]]然而,当我试图通过XML、jQuery和Ajax加载它时,效果并不理想 我认为问题在于本规范中的每一条款: function getBars(xml) { var categoryid = 1; var bars = []; $(xml).find("category").each( funct

我有一个图表,我想在上面添加链接,我想我找到了一种方法,使用一个数组,比如[[1,2,http://google.com]],[[2,3,http://yahoo.com]]]然而,当我试图通过XML、jQuery和Ajax加载它时,效果并不理想

我认为问题在于本规范中的每一条款:

function getBars(xml)
{
var categoryid = 1;
var bars = [];
$(xml).find("category").each(
    function()
    {
        bars.push(loadBars(categoryid,$(this)));
        categoryid++;
    });
return bars;
}
function loadBars(categoryid,xml)
{
var bar = [];
var bars = [];
$(xml).find("bar").each(function()
{
    bar.push(parseInt(categoryid));
    bar.push(parseInt($(this).attr("size")));
    bar.push($(this).attr("link"));
    bars.push(bar);
});
    $("#debug").append("\nBAR:")
    debug2dArray(bars);
    return bars;
    }
XML看起来像:

<?xml version="1.0"?>
    <chart>
    <category>
    <bar size="20" link="http://google.com"/>
    </category>
    <category>
    <bar size="70" link="http://yahoo.com" />
    </category>
    </chart>
使现代化
将变量更新为非全局变量后,图表现在显示右侧,但仍将两个相同的值添加到数组中。代码已更新以反映更改。

没有一个变量是使用var声明的,尤其是bar数组。这会使它们隐式全局,每次调用loadBars时都会覆盖变量。

没有一个变量是使用var声明的,特别是bars数组。这会使它们隐式地全局化,每次调用loadBars时都会覆盖变量。

我还没有消化您的全部代码,但您正在做的一个真正致命的陷阱是在函数中使用未使用var声明的变量。我特别关注您如何在这两个函数中使用bar变量

当您使用一个变量而没有像这里这样用var声明它时,您将使该变量具有全局可见性。这意味着该变量与代码中大多数地方使用的变量相同。第一个函数中的同一条就是第二个函数中的同一条

当两个函数启动时,它做的第一件事就是清除bar变量,即bar=[];。由于它们共享条引用,调用一个函数实际上会使另一个函数的操作无效

这是你的意图吗?如果不是或甚至不是,则应使用var声明变量:


我还没有完全理解您的代码,但是您正在做的一个真正致命的陷阱是在函数中使用未使用var声明的变量。我特别关注您如何在这两个函数中使用bar变量

当您使用一个变量而没有像这里这样用var声明它时,您将使该变量具有全局可见性。这意味着该变量与代码中大多数地方使用的变量相同。第一个函数中的同一条就是第二个函数中的同一条

当两个函数启动时,它做的第一件事就是清除bar变量,即bar=[];。由于它们共享条引用,调用一个函数实际上会使另一个函数的操作无效

这是你的意图吗?如果不是或甚至不是,则应使用var声明变量:


解析XML的代码:

var bars = [], cat = 0;
$.ajax({
  type: 'GET',
  url: 'plotlinks.xml',
  dataType: "xml",
  cache: true,
  success: function(data, textStatus, jqXHR) {

    $(data).find("category").each( function() {
      var barSet = [cat];
      $(this).find("bar").each(function() {
        var $elt = $(this);
        barSet.push([$elt.attr('size'),$elt.attr('link')]);
      });
      cat++;
      bars.push(barSet);
    });

    // bars is an array; each element is an array. 
    // The first element in the inner array is the 
    // category "index" (0,1,2,...). All other 
    // elements represent a link for that category. 
    // Those elements are arrays of [size,url].
    alert($.stringifyJSON(bars)); 
  }
});
结果json:

[[0,
   ["20","http://google.com"]
 ],
 [1,
   ["70","http://yahoo.com"]
 ]
]

解析XML的代码:

var bars = [], cat = 0;
$.ajax({
  type: 'GET',
  url: 'plotlinks.xml',
  dataType: "xml",
  cache: true,
  success: function(data, textStatus, jqXHR) {

    $(data).find("category").each( function() {
      var barSet = [cat];
      $(this).find("bar").each(function() {
        var $elt = $(this);
        barSet.push([$elt.attr('size'),$elt.attr('link')]);
      });
      cat++;
      bars.push(barSet);
    });

    // bars is an array; each element is an array. 
    // The first element in the inner array is the 
    // category "index" (0,1,2,...). All other 
    // elements represent a link for that category. 
    // Those elements are arrays of [size,url].
    alert($.stringifyJSON(bars)); 
  }
});
结果json:

[[0,
   ["20","http://google.com"]
 ],
 [1,
   ["70","http://yahoo.com"]
 ]
]

除了缺少var之外,还可以在每个迭代器的末尾返回变量,而不是在函数的末尾。这是一把小提琴:


除了缺少var之外,还可以在每个迭代器的末尾返回变量,而不是在函数的末尾。这是一把小提琴:


我不确定你希望你的图表是什么样子。因为通常情况下,您提供给图表的数据是“正确”显示的。如果你用以下方式写:

[
    [[1, 30, "http://google.com"], [2,0,""]],
    [[1,0,""],[2, 40, "http://yahoo.com"]]
]
…它将给出完全相同的结果,库仅假设未为特定系列提供的数据为0和

由于您不喜欢这种方式,我猜您在数据变量中出现了格式错误

因此,我认为以下是您所追求的格式:


此外,当点击条形图的一个条形图时,你可以。在那里,您可以看到如何捕获单击以及如何打开URL。由于我使用了一个全局URL数组,您只需要稍微根据需要采用它。

我不确定您希望您的图形是什么样子。因为通常情况下,您提供给图表的数据是“正确”显示的。如果你用以下方式写:

[
    [[1, 30, "http://google.com"], [2,0,""]],
    [[1,0,""],[2, 40, "http://yahoo.com"]]
]
…它将给出完全相同的结果,库仅假设未为特定系列提供的数据为0和

由于您不喜欢这种方式,我猜您在数据变量中出现了格式错误

因此,我认为以下是您所追求的格式:


此外,当点击条形图的一个条形图时,你可以。在那里,您可以看到如何捕获单击以及如何打开URL。由于我使用了一个全局URL数组,您只需稍微根据需要采用它。

可能因为没有URL,所以它不起作用AJAX@Alexander,这里有一个AJAX调用,用于实际加载上面未显示的图形。然后,该部分加载所有xml并将其提供给getBars函数AJAX@Alexander,这里有一个AJAX调用,用于实际加载上面未显示的图形。然后,该部分加载所有xml并将其提供给getBars函数
这不是我的本意,我弄糊涂了。认为var是全球性的,没有它就不是。我会解决的。不,这不是我的本意,弄糊涂了。认为var是全球性的,没有它就不是。我会解决的。