我正在尝试访问$ .getJSON回调内的全局数组。由于某种原因,我可以访问用于实际调用ajax请求的数组,但是在回调中未定义该数组。
JS
var toprint = [
{name: "Name",
year: "2014",
call: "http://api.call.com"},
// etc.....
]
for(var i = 0; i < toprint.length; i++){
$.getJSON( toprint[i].call, function( data) { // toprint[i].call accessed fine
// some code...
// toprint[i] undefined below
jsonPrint = "<div class='col'><h3>" + toprint[i].name + "</h3>" + toprint[i].year + "<ul>";
// some code...
});
}
我收到错误消息:
TypeError: toprint[i] is undefined
这很奇怪,因为根据我读过的其他SO问题,我应该能够访问AJAX回调内部的全局变量。
最佳答案
您可以访问全局数组。您的问题是循环变量i。在调用回调时,我可能会超出范围。在您的情况下,这是超出范围的。您可以解决此问题的方法是在循环本地创建一个新变量。 var currIdx = i;
,并在回调函数(如toprint[currIdx].name
)中使用该变量。不幸的是,目前我没有办法对此进行测试,但是我相信,如果以此方式进行操作,变量currIdx
的值将绑定到您的回调函数中。如果这不起作用,请尝试var currRec = toprint[i];
并在回调函数中使用currRec.name
。我实际上更喜欢第二种方法。