2012-04-07 14 views
9

Ich bin verloren. Wie kann ich eine Schleifenvariable an einen AJAX .done() - Aufruf übergeben?

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

Offensichtlich wenn ich console.log(i+' '+data)i zurückkehren würde den allerletzten Schlüssel im Objekt obj auf jeder einzelnen Iteration zu tun. Die Dokumentation versagt mir.

+0

Ich denke, ich 'success' verwenden könnte, aber so wie ich das verstehe jetzt veraltet. – philtune

Antwort

9

Sie können einen Verschluss verwenden (über eine Selbst ausgeführte Funktion), um den Wert von i für jeden Aufruf der Schleife wie folgt zu erfassen:

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

Verschlüsse sind ein Konzept, das ich immer schwer zu verstehen hatte. Danke @ jfriend00, ich versuche das! – philtune

+0

Ja, das hat funktioniert. Ich könnte sogar 'obj [index]' machen. Danke noch einmal! – philtune

5

Sie können nur ein benutzerdefiniertes Feld in dem Objekt erstellen, das Sie sende an $ .ajax(), und es wird ein Feld in "this" sein, wenn der Zusage-Rückruf gemacht wird.

Zum Beispiel:

$.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

Nach 5 Jahren habe ich längst vergessen, was diese Frage überhaupt ausgelöst hat. ;) – philtune

+0

Ich musste wissen, wie man das für ein neues Projekt macht. Also, als ich es herausgefunden habe, habe ich versucht, die Informationen auch an andere weiterzuleiten, die sagten, dass sie es wollten ... –

+0

Dies ist besser aus Sicht der asynchronen Ausführung von jquery ajax, es liefert eindeutig die beabsichtigte Gegenstands-/Objektreferenz, wenn Callback ist später ausgeführt. –

Verwandte Themen