2016-04-01 35 views
-1

$ .each döngüsünde başarı işlevinde (ajax) değerler almayla ilgili bir sorunum var.jQuery ajax her döngüde

Böyle bir şey var:

var test = []; 
$.each(images, function(index){ 
    var formData = new FormData(); 
    formData.append('image', images[index]); 

    $.ajax({ 
     url: 'http://localhost/admin/api/offers/upload_photo', 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false, 
     type: 'POST', 
     beforeSend: function(){ 
      console.log(test.length);    
      test.push(images[index]);  
     }, 
     success: function(){ 
      console.log(test.length); 
     } 
    }); 
}); 

Ve beforeSend çıkış ince (konsol günlüğü: 0, 1, 2) çalışır, ancak başka bir ile üç kez 3 (konsol günlüğü döndürür: 3, 3, 3). Gerisi hiçbir sorun olmadan çalışıyor, sadece onunla mücadele ediyorum. Bana yardım edebilecek biri var mı? Teşekkürler!

+1

tam olarak olması gereken şeyi yapıyor gibi görünüyor. –

+0

Görünüşe göre, "her" döngü, "başarı" işlevlerinden herhangi biri ateşlenmeden önce bitiyor. Yani, "başarı" zamanın birinden dolayı ateş edince, döngü tamamlandı ve "test" in uzunluğu üç. Bu, bilgilendirici olabilir: [Yanıtı bir zaman uyumsuz çağrısından nasıl döndürebilirim?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-thall – showdev

+0

Bu yüzden ajax async :) adından da anlaşılacağı gibi :) –

cevap

0

AJAX istekleri varsayılan olarak eşzamansızdır. Bu, isteği sunucuya gönderdiği, ancak kodla devam etmeden önce yanıtın geri dönmesini beklemediği anlamına gelir. Yani $.each() döngü, üç AJAX isteğinin tümünü gönderir ve tüm beforeSend: işlevlerini hemen çalıştırır. Yanıtlar işlenene kadar success: işlevleri yürütülmez; kodunuz ana tarayıcı olay döngüsüne dönene kadar olmaz. success fonksiyonları yürütüldüğünde yanıtların herhangi bir işlenmiş önce tüm beforeSend: fonksiyonları yürütülür yana

, test dizisi tüm görüntüler ile doldurulacaktır. Böylece hepsi test.length == 3'u görecekler.

+0

Teşekkürler, AJAX'ın taleplerinin tam olarak nasıl çalıştığını ve amacına ulaştığını anladım. – BociucH