jQuery ajax dentro de un problema de bucle

Este script js loop siempre obtiene el último valor de ui_item dentro de un jquery ajax funciton. ¿Cómo se puede capturar el valor correcto de cada iteración?

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"); } }); } 

¡Gracias!

El problema es que el método de callback anónimo captura la variable ui_item por referencia. Como solo hay una variable, siempre obtiene lo que se asignó por última vez a la variable.

Necesita envolver el contenido del bucle for en una función que toma i como parámetro, luego llama a la función en el bucle. Cada llamada a la función de envoltura creará una variable separada, resolviendo el problema.

Por ejemplo:

 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); 

Apague la función de sincronización, solucionará el problema, supongo. Me refiero a agregar esto: async: falso