Nasıl bir AJAX sitesinde meşgul simgeleri ele?

oy
2

: Yoğun bir simge bu soruya bakın nasıl görüntüleneceğini önerileri için eşzamanlılık sorunları ile bu soru fırsatlar, olay tıklamasında sayfa üzerinde yükleme / meşgul göstergesi veya şeffaf div - JavaScript

Bir kullanıcı bir sayfadaki bir AJAX isteği başlatan zaman çalışma ya da meşgul simgesi veya ilerleme göstergesi çeşit göstermek için yararlıdır. Bu oldukça basit bir şekilde ele alınabilir tek uzun süren süreç varsa:

function do_action() {
   show_busy_icon();       

   long_running_asynchronous_process(function() {
      // Callback function run when process finishes
      hide_busy_icon();
   });
}

Ancak, birden fazla asenkron işlemler işe yaramaz / kapama yöntemleri üzerinde kullanarak sayfadaki çalıştırıyorsanız. bitirmek için ilk süreç çalışan ek işlemler bulunmasına rağmen simgesini kapanır.

Yani, bunu nasıl çalıştığı bir veya daha fazla süreçler varken üzerinde ve kapalı süreçler bulunmadığını çalışırken, bir web sayfasında, bir gösterge görüntüleniyor ele?

Ben çalışan işlemlerin sayısının bir sayımını muhafaza etmek mümkün olacağını hayal. hide_busy_icon()süreç sayımı başarısızlığa tür eğilimli görünüyor 0. ise sadece simgeyi gizler. Belki de göremiyorum daha iyi / daha basit bir yolu var.

fikirlerinizi ve önerilerinizi için teşekkürler!

Düzenleme: Bir süre belirgin yanıtında çözeltisi ile çalıştıktan sonra, bunu çok iyi çalışıyor söylemekten mutluyum. Ben yaşamanıza tek sorun benim kendi komut ben kontrol etmiyoruz komut işlevleri çağırmak vakaları vardır. Bu işlevler geri aramalar temin edilecek izin sürece onlar başlar ve bittiği süreç sayımı güncellemek için hiçbir yolu yoktur.

Bu kutu oluştuğu bir örneği bir Google haritasına belirteçlerin kümesi ekleyerek olduğunu. benim senaryom çağırır sonra Google haritaları belirteçler hala yüklenirken meşgul simgesi kaybolur çalışır.

Bunu işlemek için iyi bir yol emin değilim.

Oluştur 09/12/2008 saat 19:28
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
8

Tüm eylemler için aynı meşgul göstergesi isterseniz, o zaman bir sayaç kullanır.

Yoğun sayımı yerine 1. "hide_busy_icon ()" 0'dan giderse yerine "show_busy_icon ()" çağıran bir "increment_busy_count ()" do "show_busy_icon ()" gerektiren ") (decrement_busy_count" a do "hide_busy_icon ()" meşgul sayımı 1'den 0'a giderse.

Cevap 09/12/2008 saat 19:47
kaynak kullanıcı

oy
1

Prototip bu yerleşik sahiptir; denilen bir özellik Ajax.activeRequestCount, herhangi bir zamanda etkin kaç istekleri izler. Ayrıca gizlemek veya "meşgul" simgesi gösterilip gösterilmeyeceğini belirlemek için küresel Ajax yanıt kurmak bildireceğiz.

Cevap 09/12/2008 saat 21:34
kaynak kullanıcı

oy
1

Sorunun yalnızca bir gösterge kullandığınızı gerçekten olduğunu düşünüyorum. Gerektiren her eylem için bir gösterge olması daha kolay olabilir.

Bir sayfada birden çok arama var ise, her bir arama alanı gösterilen veya uygun javascript fonksiyonları gizli vardır kendi bağımsız göstergesi olurdu.

Cevap 09/12/2008 saat 19:40
kaynak kullanıcı

oy
0

Hepimiz yanlış yolu ona bakıyoruz. Ajax çağrılar xhr kullanarak içerik yüklemek için kullanılır. Bu içerik yüklenir tüm DOM bazı önceden tanımlanmış eleman olmak zorunda olduğu anlamına gelir. Bu tür bir html olduğunu varsayalım:

<html>
<body>
   <div id="content_1">
   </div>
   <div id="content_2">
   </div>
</body>
</html>

jQuery kullanarak, sırasıyla content_1.php ve content_2.php gelen content_1 ve content_2 yüklemek istediğiniz söylüyorlar.

ajax işlemek için aşağıdaki komut dosyası kullan ::

$("content_1").html("<img src='loading.gif'>").load("http://samplesite.com/content_1.php");

$("content_2").html("<img src='loading.gif'>").load("http://samplesite.com/content_2.php");

Bu, ilgili div bir yükleme gif yerleştirir ve gif sonra php dan yüklenen içerikle değiştirilecektir. Basit bir satır komut dosyası. Hiçbir sayaç gerekli.

Gereksinim: jQuery herhangi en son sürümü.

Cevap 31/12/2012 saat 10:18
kaynak kullanıcı

oy
0

Ben farklı bir çözüm öneriyoruz. bu muhtemelen işe yaramaz, kod test, ancak kavramın resmidir değildir.

Aynı excact eylem birden fazla örneğini çalıştırılan değil varsayalım. Ben iletişimde zaman aşımı veya benzer sorunlar göstergesini asmak olmadığından emin olmak için bunu ancak haberleşme yeniden kurulduğunda çözülecek göstergesi verir

 var actionRegister = new Array();

 function register_action(actionId)
 {
     show_busy_icon();       
     if(blockedTile.indexOf(actionId) != -1)
     {  // element already registered
        return;
     }
     actionRegister.push(actionId)
}


function unregister_action(actionId)
{
    var idx = blockedTile.indexOf(actionId);
    if(idx  != -1)
    {  
        actionRegister.splice(idx,1);
    }

    if(actionRegister.length < 1)
    {
       hide_busy_icon();
    }
}
Cevap 18/04/2012 saat 10:03
kaynak kullanıcı

oy
0

Cevabımı burada bakın:

site içeriği yüklenirken bir yükleme ekranı görüntülemek nasıl

Ben, tam olarak bunun nasıl küçük, çalışan JavaScript örnek vermek o yardımcı olur.

Cevap 09/12/2008 saat 19:40
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more