2013-08-26 48 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