如何在循环期间访问jquery getJson调用($ .getJson)中的索引变量?

时间:2015-03-13 15:10:42

标签: javascript jquery callback getjson

我有以下代码,已针对此问题进行了简化。基本上我有一个循环,在每次迭代时,调用jquery getJSON函数,调用API端点来获取一些天气数据。问题是我需要从循环中访问索引,当getJSON请求被触发时,我遇到了一些麻烦。我需要知道请求的索引是什么,所以我可以将它与数据库中的一些数据相匹配。

代码:

function buildCities()
{    
    for (var i = 0; i < 7; i++) 
    {
        var jqxhr = $.getJSON("http://api.openweathermap.org/data/2.5/weather?q=usa,phoenix&units=metric", function(response) 
       {
           alert(i); //this will always be 7 - this is the issue.  i desire it to be 0,1,2,3, etc.... 
       });
    }
}

这是一个显示问题的JSFiddle,如果需要你可以继续工作;)   - http://jsfiddle.net/5tr34k/0xshvrzp/

请求: 如何在请求的回调函数内注入或以其他方式访问此索引(i)?谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

添加一个范围函数(IIFE),为您的变量创建一个新范围:

function buildCities()
{    
    for (var i = 0; i < 7; i++) 
    {
        (function(index){
            var jqxhr = $.getJSON("http://api.openweathermap.org/data/2.5/weather?q=usa,phoenix&units=metric", function(response) 
           {
                alert(index); 
           });
        })(i);
    }
}

答案 1 :(得分:0)

此外,如果您有权访问ES6,将i更改为val而不是var也可以。

主要问题是你正在处理函数范围,所以你不断重用{}作用域的相同变量vs val,或者为你创建新范围的TrueBlueAussie答案。