2012-04-07 18 views
9

Estoy perdido. ¿Cómo podría pasar una variable de bucle a una llamada ADAX .done()?

for (var i in obj) { 
    $.ajax(/script/).done(function(data){ console.log(data); }); 
} 

Obviamente, si tuviera que hacer console.log(i+' '+data)i devolvería el último clave en el objeto obj en cada iteración. La documentación me falla.

+0

Calculo que podría usar 'Success', pero como yo entiendo que ahora está en desuso. – philtune

Respuesta

9

Se puede utilizar un cierre (a través de una función de ejecutar el self) para capturar el valor de i para cada invocación del bucle de esta manera:

for (var i in obj) { 
    (function(index) { 
     // you can use the variable "index" here instead of i 
     $.ajax(/script/).done(function(data){ console.log(data); }); 
    })(i); 
} 
+0

Los cierres son un concepto que siempre me ha costado entender por completo. Gracias @ jfriend00, ¡lo intento! – philtune

+0

Sí, eso funcionó. Incluso podría hacer 'obj [índice]'. ¡Gracias de nuevo! – philtune

5

Usted sólo puede crear un campo personalizado en el objeto que se enviar a $ .ajax(), y será un campo en "esto" cuando se realice la devolución de llamada de la promesa.

Por ejemplo:

$.ajax( { url: " https://localhost/whatever.php ", method: "POST", data: JSON.stringify(object), custom: i // creating a custom field named "custom" }).done(function(data, textStatus, jqXHR) { var index = this.custom; });

+0

Después de 5 años, hace tiempo que olvido lo que provocó esta pregunta. ;) – philtune

+0

Necesitaba saber cómo hacer esto para un proyecto reciente. Entonces, cuando lo resolví, traté de transmitir también la información a otros que dijeron que lo querían ... –

+0

Esto es mejor desde el punto de vista de ejecución asíncrona de jquery ajax, proporciona claramente la referencia del objeto/objeto previsto cuando se realiza la devolución de llamada ejecutado este último a tiempo. –

Cuestiones relacionadas