2012-06-04 33 views
3

我有一個JSON提要插入到每個語句中。我想要做的是for循環var i我希望在每個語句中使用這個值。在下面的例子中,for循環將運行0,1,2。如果i == 1那麼我想運行JSON提要,但僅限於i = 1值。目前,當if語句被觸發時,JSON每條語句都會運行所有的項目b/c,它的值從0開始。因此,console.log返回0,1,2。我希望它只返回1.謝謝你有任何幫助。將For循環參數傳遞到每個語句中

編輯
我的重點是使$.each(data.DATA, function(i, item) {i這個每個語句中使用數i等於在for循環語句。因此,如果JSON文件中有3個項目,則只會運行項目1。

for (var i = 0; i < 2; i++) { 
    if (i == 1) { 
     $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, function(data, i) { 
      $.each(data.DATA, function(i, item) { 
       console.log(i); 
      } 
     }): 
    } 
}​ 

回答

3

你需要引入一個附加功能範圍,以使這項工作。

function checkOnly(i) { 
    return function(data) { 
    $.each(data.DATA, function(ii, item) { 
     if (ii == i) console.log(ii); 
    }); 
    }; 
} 

for (var i = 0; i < 2; i++) { 
    if (i == 1) { 
     $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, checkOnly(i)); 
    } 
} 

這裏,傳遞給$.getJSON的回調是在另一個函數內部創建的。通過這樣做,在.each()循環中檢查的變量「i」是來自for循環的「i」的拷貝。處理函數因此有一個固定的值來比較。

+0

這看起來很有希望。給我一點時間來測試。 –

+0

@HelpInspireMe這是一個常見問題的變體。 JavaScript變量作用域僅在函數級別引入的事實對於那些習慣於Java,C++等的人來說是一個絆腳石。然而,由於JavaScript具有真正可行的閉包,因此跨過這個過程很容易。 – Pointy

0
for (var i = 0; i < 2; i++) { 
    var x = i; 
    if (i == 1) { 
    $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, function(data, i) { 
     $.each(data.DATA, function(n, item) { 
      if(n == x){ 
       console.log(n); 
       break;// you can use break if you want 
      } 
     } 
    }): 
    break; // you can use break if you want 
} 

}

+0

這也行不通。 – Pointy