SORU
10 EYLÜL 2009, PERŞEMBE


jQuery AJAX JSON yanıt, işleme AJAX sonucuna göre veya JSON içeriği için yoklama

Acemi-orta-JavaScript/jQuery bir programcı değilim, somut/yürütülebilir örnekler çok mutluluk duyacağız.

Projemde AJAX JSON da içerik içeren döndüren bir URL ankete kullanarak DOM, ya da bir mesaj eklenmesini gerektirir{ "" : "" } beklemede . durum arka uç hala içeriği ile bir JSON yanıt oluşturma üzerinde çalışıyor olduğunu gösterir. Bu fikir ilk istek için URL tetikler arka uç için başlangıç bina bir JSON yanıt (önbelleğe alınmış), ve sonraki çağrılar kontrol edin eğer bu JSON hazır (hangi durumda sağlanır).

Benim komut, 1:30 dak., 15 saniyelik aralıklarla bu URL ankete ihtiyacım var ve aşağıdakileri yapın:

  • Eğer AJAX bir hata sonucu istemek, senaryoyu sonlandırmak.
  • AJAX başarılı sonuçlar istemek, ve JSON içeriği içerir{ "" : "" } beklemede . durum yoklama devam ediyor.
  • Eğer AJAX isteği başarı ve kullanışlı içeriği JSON içeriği (yani herhangi bir geçerli yanıt dışında . sonuçları ^em>{ "" : "" } beklemede . durum ), sonra da içeriği görüntülemek, yoklama durdurmak ve komut sona erdirmek.

Sınırlı bir başarı ile birkaç yaklaşım denedim, ama olması gerekenden daha kirli olduklarını hissediyorum. Burada ise JSON yanıt kullanılabilir içerik alırsam işini yapan başarılı bir kerede tek bir AJAX isteği yapmak için kullandım iskelet bir fonksiyonu

// make the AJAX request
function ajax_request() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a global variable
    dataType: 'json',
    error: function(xhr_data) {
      // terminate the script
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        // continue polling
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

Ancak, bu işlev, şu anda geçerli bir JSON yanıt kullanışlı içerikli aldığı sürece hiçbir şey yapmaz.

Sadece yorum satırları ne emin değilim. Sanıyorum başka bir işlevi yapmalı yoklama ve ara ajax_istek() gerektiği gibi, ama bilmiyorum, en şık yolu için ajax_istek() için iletişim kurmak sonuçları tekrar yoklama çalışması olabilir cevap uygun.

Herhangi bir yardım çok takdir! Bana herhangi bir bilgi olursa haber ver lütfen. Teşekkürler!

CEVAP
10 EYLÜL 2009, PERŞEMBE


Özyinelemeli olarak arama ajax_request için basit bir zaman aşımı kullanabilirsiniz.

success: function(xhr_data) {
  console.log(xhr_data);
  if (xhr_data.status == 'pending') {
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  } else {
    success(xhr_data);
  }
}

Bu çizgi etrafında bir sayaç kontrol sopa ve anketler maksimum sayıda var.

if (xhr_data.status == 'pending') {
  if (cnt < 6) {
    cnt  ;
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  }
}

Bir uyarı falan koy istemiyorsan hata fonksiyonu olarak bir şey yapmanıza gerek yok. bu hata basit gerçeği çağrıldığını başarı işlevi önlemek ve muhtemelen başka bir anket tetikliyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Brenan

    Dylan Brenan

    22 Aralık 2009
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010
  • Migs351

    Migs351

    3 HAZİRAN 2007