2014-07-21 26 views
5

Bu özel öğe için verdiğim spesifikasyonları takiben, hepsi aynı anda başlatılan birkaç düzine AJAX isteğim var ve sonuçlar mümkün olan en kısa zamanda yanıt vermek için tamamlandıklarında görüntüleniyor .Bir AJAX isteğinin ne zaman başladığını algıla

Şu anda, öğelerin tümü "Yükleniyor ..." şeklinde görünüyor, ardından istekler tamamlandığında aşamalı olarak değiştiriliyor.

Tarayıcı tarafından yerleştirilen sınırlamalar nedeniyle, yalnızca yaklaşık beş tanesi aslında yükünü herhangi bir zamanda yüklerken, diğerleri daha önce olanlar tamamlanana kadar engellenir.

Blok bittiğinde ve istek gerçekten gönderildiğinde herhangi bir bulgu olup olmadığını öğrenmek istiyorum. 4 dışındaki readyState değerlerini tespit etmek için onreadystatechange kullanılarak

İlk testler umut verici değildir - hayır olay tetiklenir o noktada ben hemen arkaya (test için AJAX yanıtları olduğuna dikkat içinde 2, 3 ve 4 olsun, tamamlanana dek

Herhangi bir fikir için yapay olarak usleep ing tarafından geciktirildi. Yoksa engelleme bölümünü manuel olarak uygulamak için tek gerçek seçeneğim mi?

+0

Bu, engelleme işlemini yapan tarayıcıdır; wild'e 10 tane istek gönderirsiniz ve tarayıcı sadece 5 tanesi paralel olarak çağrılır ve geri kalanlar beklemeye alınır. Herhangi bir alakalı cevap alamazsanız, kendiniz bir kuyruğu kendiniz oluşturmanız gerekebilir, böylece kendiniz uygun bir zamanda isteklerin başlatılmasını sağlayabilirsiniz. Son çare çözümü olarak. – Gimby

+0

Yanıtların gerçekten her "readyState" geçişini ayrı ayrı yapmak için yeterince geciktirildiğini doğrulayabilirsiniz (ağ monitörünüz aracılığıyla)? – svidgen

+0

@svidgen: Bu noktayı 6 saniyelik bir uyku ile ajax hedefine vurarak test ettim. Belirtildiği gibi 2,3,4, 6 saniye sonra sürekli tetiklendi. İşte [bir demo keman] (http://jsfiddle.net/2nWCq/). – mithunsatheesh

cevap

-3

Eğer ajax request.It birden çok istek paralel ve tepkisini en kısa sürede almak göndermek için iyidir çağırmak için jquery işlevini kullanabilir miyim ..

+2

JQuery'de kod yazmanın imkansız olduğu düşünüldüğünde imkansız, tarayıcıyı daha fazla eşzamanlı istekleri ele almayı, isteklerin engellemeyi durdurduğunu ve çalışmayı başlattığını söyleme. Doğruyu biliyorum?JQuery'nin düz JavaScript ile aynı kısıtlamaları paylaştığını kim düşünürdü? ... –

2

aslında alabilirsiniz bunun en iyi yaklaşım readyState "için izlemektir 1 ".. sunucu bağlantısını belirten bir bağlantı kuruldu. Bu, bağlantının gerçekte ne zaman yayına geçtiğine ilişkin oldukça yakın tahminini verecektir.

http://jsfiddle.net/r0gknr3w/ numaralı telefondan hackledim. Sadece JS konsolunu izleyin ve "1" mesajını göreceksiniz. Asla hazır bir 1 numara görmediğini söylüyorsun ... ama kesinlikle var.

var xhr = $.ajax({ 
    url: "/echo/html", 
    xhr: function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function() { 
      console.log(xhr.readyState); 
     } 
     return xhr; 

    } 
}); 
+0

Hm, ilginç ... Sadece 1'i kaydediyorum ... ve iki kere alıyorum. Testlerimi yürüttüğümde, 1’in yalnızca IE’de oturum açtığını gördüm, Chrome tamamen atladı. Ayrıca, yanıtın ertelenmesi durumunda, '1 'hemen IE'de kaydedilir, ardından kilit bekletilir, ardından hemen ardından 234'dür. –

+0

Her seferinde art arda "1,2,4" görüyorum. – joeltine

İlgili konular