2015-03-13 65 views
0

我有下面的代碼,這個問題已經被簡化了。基本上我有一個循環,在每次迭代中,調用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)?謝謝你的幫助。

回答

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); 
    } 
} 
+0

wickedy!這工作很好。現在我只需要愚蠢的API來更好地響應快速通話! – 2015-03-13 15:17:09

+0

也CRIKEY M8! – 2015-03-13 15:18:36

+0

@ jordan.peoples:是「類型」以「立體聲」形式提供,但不推薦:) – 2015-03-13 15:22:10

0

此外,如果你有機會獲得ES6改變我對val的替代變種也會起作用。

主要問題是您正在處理函數範圍,因此您不斷重複使用與範圍相同的變量vs val,或者爲您創建新範圍的TrueBlueAussie答案。

+0

您是否認真暗示即將推出的標準*作爲當前現實世界問題的解決方案? :) – 2015-03-13 15:17:33

+0

這是什麼ES6? – 2015-03-13 15:17:58

+0

Ecmascript 6是JavaScript標準的最新版本,@TrueBlueAussie你在我寫我的時候已經有了很好的答案,所以只是想用另一種方式來增加價值,而不是用不同的口味重寫你的。 – 2015-03-13 15:20:03