我正在尝试访问$ .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。我实际上更喜欢第二种方法。

09-08 04:20