ajax: cevap için bekleyin, ama düzenli olarak kontrol yok

4 Cevap php

Ben çalıştırmak için uzun bir zaman alır bir PHP süreç var. Ben bitmesini beklemek için onu çağırır AJAX işlemi istemiyorum. PHP işlemi bittiğinde bir veritabanında bir alan koyacaktır. Periyodik veritabanı alanının kontrol ve mesaj ayarlamak için AJAX yoklama çağrısı çeşit olmalıdır.

Nasıl yoklamak yerine beklemek bir jQuery AJAX Arama kurarım? PHP komut dosyası özel bir şey yapmak zorunda mı?

4 Cevap

Değeri hazır ve istemci tarafı kurmak kadar bu sunucu tarafı eylemi olması daha kolay, basit bir olumsuz tepki ile yanıt olumlu yanıt alınan veya başarısızlık sabit bir sayıdır kadar () (setTimeout ile) defalarca anket gözlenmiştir.

 var timer;
 var count = 0;
 function poll(url) {
      timer = setTimeout(function() {
          $.ajax({
              url: url,
              success: function(data) {
                  if (data.Status) {
                      ...do something...
                  }
                  else {
                     if (++count > 10) {
                       ...failure action...
                     }
                     else {
                         poll(url);
                     }
                  }
              ...other options...
           })
      },5000)
 }

Sonra sunucu tarafında bir şeyi (yalancı) kullanın ...

 if operation is not complete
     return serialize( { Status : false } )
 else
     data = ....
     data.Status = true
     return serialize(data)
 end

Uzun süren sürecine Step 1: ilk çağrı - Set ignore_user_abort (true); uzun bir zaman alır ve bağlantıyı kapatmak PHP komut dosyası.

DB alan yöntemler önerilmektedir kullanılarak güncellenen ise Step 2: edin.

Bir hızlı geçici çözüm olduğunu, bunun için kontrol AJAX telsizi yöntemi aracılığıyla doğrudan DBS erişen beri iyi bir uygulama değildir çağırmak başka bir PHP komut dosyası oluşturmak olacaktır.

  1. Gerekli DB çekle, bir PHP dosyası oluşturun.
  2. Bunu yapmak bu yüzden 'T' veya 'F' ya da buna benzer bir şey yayınlayacağız
  3. Bir SetInterval('yourfunctionname',100) oluşturmak böylece yoklama komut arayabilir.
  4. Bu yoklama fo cevabı 'T' ise, diğer uzun zamanlı betik diyoruz.

(Uzun yoklama aksine) her zamanki oylamayı demek istiyorsun? Evet, belki bu yardımcı olur: http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html

PHP komut dosyası sadece veritabanı alanını kontrol ve derhal doğru / yanlış dönecekti.