2013-08-26 71 views
0

我在$ .get的作用域中訪問var i時遇到問題。這是我的代碼:在jquery中調用var for for循環獲取請求

for (var i = 0; i < printer_ids.length; i++) { 
    $.get('/get_printer_status_message/'+printer_ids[i]+'/', function(data) { 
    $('#printer_status_'+printer_ids[i]).html(data); 

    console.log(data) 
    console.log('id: #printer_status_'+printer_ids[i]); 
    console.log('current:' + $('#printer_status_'+printer_ids[i]).html()); 
    }); 
} 

我在$ .get行中定義,但不在$ .get的作用域中。如何訪問$ .get的作用域中的var i?

回答

0

你必須捕捉到一個局部範圍的i變量:

for (var i = 0; i < printer_ids.length; i++) { 
    (function (i){ 
    $.get('/get_printer_status_message/'+printer_ids[i]+'/', function(data) { 
     $('#printer_status_'+printer_ids[i]).html(data); 

     console.log(data) 
     console.log('id: #printer_status_'+printer_ids[i]); 
     console.log('current:' + $('#printer_status_'+printer_ids[i]).html()); 
    }); 
    }(i)); 
} 
+0

請給我的相關代碼的例子在我的問題 – user8957

+0

謝謝你添加一個例子:) – user8957

+0

@ user8957,雖然這個答案是正確的,因爲你似乎只使用'我'來訪問'printer_ids [我]'也許最好通過'printer_ids [我]'而不是簡單的'我'。 – plalx

1

一個更好的重構是避免重新定義每個圈的功能:

var doIt = function (printer_id){ 
    $.get('/get_printer_status_message/'+printer_id]+'/', function(data) { 
     $('#printer_status_'+printer_id).html(data); 

     console.log(data) 
     console.log('id: #printer_status_'+printer_id); 
     console.log('current:' + $('#printer_status_'+printer_id).html()); 
    }); 
}; 

for (var i = 0; i < printer_ids.length; i++) { 
    doIt(printer_ids[i]); 
} 
+0

讓我們脫機 – robrich

+0

+1,以避免在每個循環迭代中創建一個額外的匿名函數,只是爲了創建一個新的作用域並傳遞'printer_id'而不是通過反覆執行'printer_ids [i]'來執行多個屬性查找。 – plalx