jQuery ajax dentro de um problema de loop

Este script de loop js sempre obtém o último valor de ui_item dentro de uma function jiki ajax. Como pode pegar o valor correto de cada iteração?

for (var i = 0; i <= split_files_cb_value_holder.length - 1; i++){ var split_values = split_files_cb_value_holder[i].split(':'); ui_item = split_files_cb_value_holder[i]; $.ajax({ type: "POST", url: "ds/index.php/playlist/check_folder", data: "component_type="+$('#component_type').val()+"&value="+split_values[1], success: function(msg) { console.log(ui_item); //ALWAYS GETS THE LAST VALUE }, error: function() { alert("An error occured while updating. Try again in a while"); } }); } 

Obrigado!

O problema é que o método de retorno de chamada anônimo captura a variável ui_item por referência. Como há apenas uma variável, ela sempre recebe o que foi atribuído por último à variável.

Você precisa envolver o conteúdo do loop for em uma function que toma i como um parâmetro e, em seguida, chamar a function no loop. Cada chamada para a function invólucro criará uma variável separada, resolvendo o problema.

Por exemplo:

 function doCheck(i) { var split_values = split_files_cb_value_holder[i].split(':'); var ui_item = split_files_cb_value_holder[i]; $.ajax({ type: "POST", url: "ds/index.php/playlist/check_folder", data: "component_type="+$('#component_type').val()+"&value="+split_values[1], success: function(msg) { console.log(ui_item); //Don't always get the last value }, error: function() { alert("An error occured while updating. Try again in a while"); } }); } for (var i = 0; i < split_files_cb_value_holder.length; i++) doCheck(i); 

Desligue o async, ele consertará o problema, eu acho. Quero dizer, adicione isto: async: false