2012-04-07 20 views
9

Kayboldum. Bir döngü değişkenini bir AJAX .done() çağrısına nasıl iletebilirim?

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

Açıkçası, her tekrarında nesne obj çok geçen anahtar dönecekti console.log(i+' '+data)i yapmak olsaydı. Belgeler beni başarısız ediyor.

+0

ben 'success' kullanabilirsiniz anlamaya, ama anladığım kadarıyla o artık uygun bulunmamaktadır. – philtune

cevap

9

Böyle döngünün her çağrı için i değerini yakalamak için (kendi kendine yürütme fonksiyonu ile) bir kapatma kullanabilirsiniz:

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

Kapanışlar, her zaman tam anlamıyla zor bir zaman geçirdiğim bir kavramdır. Teşekkürler @ jfriend00, bunu deneyeceğim! – philtune

+0

Evet, işe yaradı. Hatta [index] 'yapabilirim. Tekrar teşekkürler! – philtune

5

sadece nesnede özel bir alan oluşturabilirsiniz size $ .ajax() öğesine gönder, ve sözün geri çağrılması yapıldığında "bu" da bir alan olacaktır. Örneğin

:

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

5 yıl sonra, bu soruyu ne sorduğumu bile çoktan unuttum. ;) – philtune

+0

Yeni bir proje için bunu nasıl yapacağımı bilmem gerekiyordu. Ben de anladığımda, bilgiyi istediklerini söyleyen başkalarına da aktarmayı denedim ... –

+0

Bu, jQuery ajax asenkronize yürütme noktası açısından daha iyidir, geri arama olduğunda açıkça istenen nesne/nesne referansını sağlar. zamanında ikincisi. –