2011-03-30 9 views
6

Elbette yoldan çıkmış olabilirim, ancak JQuery prefilter işlevselliğini kullanıp kullanamayacağınızı ve yanıt verilerinin bir Ajax Başarı ile analiz edilip edilmediğini merak ediyorum. ajax benim error olay işleyicisine koşullu olarak döndüğümde, döndüğüm JSON (hata iletileri) içindeki bazı öğelerin varlığına dayalı çağrıları çağırır.JQuery AJAX Ön Filtresini Kullanarak Yanıt Verilerini Kontrol Etme ve Koşullu Olarak İleriye 'Hata Durumu Olay İşleyicisine İletme

Bu, eğer sayfada global olarak herhangi bir ajax işlevi için ayarlanmışsa güzel olurdu. Belki bu, bunun için en iyi yol değildir; herhangi bir alternatif fikri varsa, lütfen bana bildirin!

ön filtresi:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter("json", function(options, originalOptions, jqXHR) { 
    jqXHR.success(function(data, textStatus, jXHR) { 
     if(hasErrors(data)) { 
      //forward to error event handler? 
     } 
    }); 
}); 

Ajax çağrı:

$.ajax({ 
     type:  "POST", 
     data:  { 
        theData: "someData"      
       }, 
     url:  theUrl, 
     dataType: 'json', 
     cache: false,   
     success: function (data, textStatus, jqXHR) { 
        //do stuff on success 
       } 
     error: function (jqXHR, textStatus, errorThrown) { 
        //I want to do this stuff if data contains errors from server 
       } 
}); 

Çok teşekkür ederim!

cevap

12

İşte bunu nasıl yaparım: Orijinal başarı işlevini (her istek için özel) saklıyorum ve sonra başka bir geri arama iliştiriyorum. Hatalar yoksa, özgün çağrıyı çağırabilirim:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    var originalSuccess = options.success; 

    options.success = function (data) { 
     if(hasErrors(data)) { 
      //forward to error event handler or redirect to login page for example 
     } 
     else { 
      if (originalSuccess != null) { 
       originalSuccess(data); 
      } 
     } 
    }; 
}); 
+0

Her başarılı geri dönüşten sonra özel işleyici kullanıyordum. Şimdi jQuery API'sinde $ .ajaxPrefilter'i gördüm ve cevabınızı gördüm. Bana zaman kazandırdın. Teşekkürler. – jsonx

+1

Bu mükemmel! Çok teşekkür ederim! – icats

+1

Tüm ".done" geri aramalarını nasıl durdurursunuz ve 2. "hasErrors (data)" koşulunda '.fail' geri aramalarını çalıştırırsınız? JqXHR.reject() 'yi denedim ama bitti' jqXHR.reject bir fonksiyon değil '. Şartlı bölümde tam olarak ne yazıyorsunuz? – kenn

İlgili konular