I am adding deferred getJSON calls to an array inside a for loop that references local variables inside their success function. The problem that I encountered is that when the success function is called, the local variable takes the value from the last iteration of the loop. Example below:
var calls = []; var arr = ['a','b','c']; for (var a in arr) { calls.push( $.getJSON(window.location, function() { alert(arr[a]); }) ); } $.when.apply($,calls);
jsFiddle: http://jsfiddle.net/Me5rV/
This results in three warnings with a value of "c", while I need the values โโof "a", "b" and "c". Is it possible?
EDIT: The below works, but I'm not quite sure why this is different?
var calls = []; var arr = ['a','b','c']; for (var a in arr) { calls.push( $.getJSON(window.location, function(x) { alert(x); }(arr[a])) ); } $.when.apply($,calls);
jsFiddle: http://jsfiddle.net/Me5rV/1/
source share