Artımlı Çıktı - jQuery ve PHP

3 Cevap php

Ben öğeleri büyük bir set oranları ve her biri için bir puan çıkaran bir uygulama var.

Benim php komut ben her reyting için veri çıkışını ele ob_start ve ob_flush kullanıyorum. Ben doğrudan komut dosyası yüklemek, bu harika çalışıyor. Ben kullanmaya çalıştığınızda ancak. Jquery aracılığıyla olsun, sonra tüm içerik yükler ve yerine adım adım ekleyerek, bir kap içine yerleştirilir.

Ben aşağıdaki merak ediyorum

  1. Get tamamladı önce veri yerleştirme başlatmak için bir yolu var mı?
  2. Ben süreci tamamlanana kadar sürekli komut yoklamak gerekir mi?
  3. Verileri görüntülemek yerine almak için daha etkili bir yolu var mı?

3 Cevap

Sorunların bu tür için, bu yaklaşım olacaktır:

  1. Bir kullanıcı için ob_start() ve ob_flush() kullanarak kendi tarayıcısında javascript devre dışı eski senaryoyu tutun.
  2. Javascript etkinleştirmeniz sahip bir kullanıcı için, bir anda, önceden tanımlanmış numarası içeriği biri yüklenemedi. Js ayırt kullanıcı etkinleştirmek ve ben 2 sayfada düşünüyorum değildir. Ilk sayfada eski komut dosyası için bir bağlantı görüntüler. Ardından [(0)] görüntülemek (veya oluşturmak) bir div, daha sonra {o içine içeriği yükleyecektir eski komut için linke tıklayın önünü Bu sayfada bir jquery kodu koymak, böylece linke tıklayın }.
  3. Belli bir durum (Ex, boş bir yanıt) ulaştıktan sonra, sonra sürekli AJAX kod çağırmak için bir setTimeout kullanabilirsiniz kaldırabilirsiniz setTimeout ile clearTimeout. Her AJAX isteği bir ofset param olması gerekir, bu yüzden son AJAX çağrısından içeriği almak olacaktır. Sonra, yanıt almak sonraki AJAX çağrı için ofset artırmak. Bunun için global bir değişken kullanabilirsiniz.
  4. Son AJAX hala yanıt beklerken yarış durumu önlemek için, bir AJAX isteği çalıştırmak önlemek için basit bir global değişken kullanabilirsiniz. Örnek kod:

    //lock variable
    var is_running = FALSE;
    //offset start with 0
    var offset = 0;
    function load_content($) {
      //check lock
      if (! is_running) {
        //lock
        is_running = true;
        //do AJAX
        $.get(URL,
          { PARAM },
          function(resp){
            //put data to 'div'
            //...
            //if empty, then call clearTimeout
            //...
            //increase offset here
            offset = offset + NUM_ITEM_FETCHED
            //release lock
            is_running = false;
          });
      }
    }

Nokta beri ob_start AJAX çağrısı kullanırken, el yanıtı belirlemek gerektiğini dikkat gerekir ve ob_flush Bu senaryoda hiçbir etkisi olmayacaktır.

Ben bu kendi kod oluşturmanıza yardımcı olacağını umuyoruz.

JQuery tam sayfa .. yüklenmesi tamamlandıktan yani tüm süreç bitinceye kadar php arama sayfasına geri almazsınız ne olursa olsun zaman .. (ajax tek gönderme / olduğunu ajax çağrısından bir başarı durumunu alırsınız sistemi) bir alma

Siz ne istediğinizi yapmak için sistem karmaşık gerekir ..

örnek ..

  1. your php updates an external file of progress, and your jquery polls this file in some interval and displays progress..
    You would initiate the interval polling on ajax submit, and on ajax success terminate it..

Ben biraz geri Ben e-postaların bir dizi göndermek ve "23/50 gönderme" gibi bir şey söylemek için jquery sayfasını güncellemek için bir php komut dosyası istediğim yerde benzer bir sorun vardı.

Ne yapıyor sona erdi seferinde bir öğe işlemek için php komut dosyası kurma oldu. Bu da senin durumunda işe yarayabilecek. Jquery sadece bir madde işleyen bir php komut dosyası için bir tür bir öğe tanımlayıcı geçmek olabilir? Sonra geri arama, sen sayfasında o öğenin verileri yerleştirmek de sonraki öğe için yeni bir ajax isteği oluşturmak gibi olabilir. Öğelerin tüm listesi ile döngüye edene kadar başka bir deyişle, her bir arama sonraki öğe için yeni bir isteği yaratacak.

Sen ne düşünüyorsun?

-DLH