我有以下代码,已针对此问题进行了简化。基本上我有一个循环,在每次迭代时,调用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)?谢谢你的帮助。
答案 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答案。