我已经缩小了我的基本问题的范围:从 IE9 到 FireFox(和 Chrome),数组的范围有所不同。
在以下函数(仅摘录)中,我声明一个数组,然后通过调用 $.getJSON() 来填充它。因为引用 HoldEm 的行出现在 ProcessArray 函数内(甚至在 boolSortArray 分支内),所以我假设排序工作此时可用。它在 IE9 中有效,但在 FireFox/Chrome 中无效。在引用的行中,sortedWorking 在 FireFox/Chrome 中为空。在任何浏览器中都不会发出错误。
实验表明,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);
您对“$.getJSON()”的调用是异步。您不能依赖调用后的代码行中填充的数组。相反,放置依赖于正在填充的数组的代码inside它的完成处理程序。
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”函数本身需要重新考虑,因为,类似地,在它返回您之后still无法确定该数组是否已被填充。一般来说,这样做的方式是遵循与“$.getJSON()”本身完全相同的模式:向“ProcessArray()”添加一个回调参数,以便其客户端可以传入一个函数,以便在数组满足条件时调用该函数。已获取并排序以及完成其他任何操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)