javascript数组的范围不同于IE9到FireFox / Chrome

时间:2011-12-04 17:55:36

标签: javascript jquery

我已经缩小了我的基本问题:数组的范围不同于IE9到FireFox(和Chrome)。

在下面的函数中(仅摘录),我声明一个数组,然后通过调用$ .getJSON()来填充它。因为引用HoldEm的行发生在ProcessArray函数中(甚至在boolSortArray分支中),我假设在那时可以使用sortedWorking。它在IE9中,但在FireFox / Chrome中没有。在引用的行中,在FireFox / Chrome中,sortedWorking为空。任何浏览器都不会发出错误。

实验表明,sortedWorking在行标记为“$ .getJSON的结尾”之前填充,而在该行之后它是空的。有什么想法吗?

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) {
//...
var sortedWorking = [];
if(boolSortArray) {
  $.getJSON('MurakiMaida.json', function(data) {
    $.each(data.person, function(i, xdata) {
    ...
    sortedWorking.push(targetID + ":" + birthYear);
    ...
    }); //end of $.each
  });   //end of $.getJSON

  var HoldEm = BubbleSort(sortedWorking);

1 个答案:

答案 0 :(得分:3)

你打电话给" $。getJSON()"是异步。您不能依赖于在调用后的代码行中填充数组。相反,将依赖于数组的代码放在里面的完成处理程序中。

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) {
//...
var sortedWorking = [];
if(boolSortArray) {
  $.getJSON('MurakiMaida.json', function(data) {
    $.each(data.person, function(i, xdata) {
    ...
    sortedWorking.push(targetID + ":" + birthYear);
    ...
    }); //end of $.each

     var HoldEm = BubbleSort(sortedWorking);
     // ... whatever else ...
  });   //end of $.getJSON

现在这也可能意味着你的" ProcessArray"函数本身需要重新考虑,因为类似地,在它返回之后仍然不能确定数组是否已被填充。通常,完成的方式是遵循与#34; $。getJSON()"完全相同的模式。本身如下:将一个回调参数添加到" ProcessArray()"这样它的客户端就可以传入一个函数,当数组被提取和排序以及其他任何操作时都会被调用。