2010-12-03 11 views
19

this one gibi soruların yanıtlanması, jQuery's $ .ajax() yöntemini tek bir konumda hata işleme sağlayabilmem için sarmak istiyorum. Bir uygulamanın tüm uzaktan aramaları tarafından otomatik olarak kullanılmalıdır.

Basit bir yaklaşım, $ .get() ve $ .post() öğelerinin cepheleri $ .ajax() yöntemine nasıl uyguladığı gibi yeni bir ad oluşturmaktır. Ancak, $ .ajax() ismini tekrar kullanacağımı umuyorum, böylece kodun geri kalanını standart jQuery sözdizimini kullanarak tutabileceğiz, kendi hata işlemimizi ekledik. Bu pratik ve/veya iyi ya da muhtemelen korkunç bir fikir mi?

DÜZENLEME: Şimdiye kadar verilen yanıtlar, .ajaxError() yönteminin yol olduğunu gösterir. Bunun 400 ve 500 seviye hatalarını yakalayacağını biliyorum, ancak 302 yönlendirmeyi de yakalamak için bir yol var mı? Bir giriş sayfasına yönlendiren yanıtları ele almaya çalışıyorum, ancak bir XHR isteği olduğunda bu yönlendirmeyi durdurmak, kullanıcının otomatik olarak onları zorlamak yerine eylemi iptal etmesine izin vermek istiyoruz.

+0

, tepkiler dışı Tıkanmış AJAX istekleri muhtemelen 302 yerine 401 döndürmelidir. – gtd

cevap

26

$.ajaxError'a bakmak isteyebilirsiniz. ( ).

Düzenlemenizi yanıtlamak için, $.ajaxSuccess ile başarılı ajax isteklerini yakalayabilir ve $.ajaxComplete ile tüm (başarılı ve başarısız) yakalayabilirsiniz. Sen Aslında

$(document).ajaxComplete(function myErrorHandler(event, xhr, ajaxOptions, thrownError) { 
    alert("Ajax request completed with response code " + xhr.status); 
}); 
+0

@Marc L: Ek bilgilerinizle eşleşecek şekilde düzenlenmiştir. Ayrıca, bunu ilginç bulabilirsin: http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call – sje397

+2

Denemek ($) (belge) .ajaxError (…); '- $ kullanarak.ajaxError (...) 'benim için çalışmadı. – ripper234

2

gibi xhr parametresinden yanıt kodunu alabilirler, jQuery sadece bu amaç için kanca, .ajaxError() sağlar. $ajaxError() ile bağladığınız tüm işleyiciler, sayfadaki ajax isteği bir hatayla tamamlandığında çağrılır. Bir seçicinin belirtilmesi, .ajaxError() işleyicinizin içine this referansı vermenizi sağlar.

sayfadaki tüm ajax isteği hataları işlemek için kullanabilirsiniz ve document işaret edecek this kullanmak için, böyle bir şey yapabileceğini:

$(document).ajaxError(function(event, request, settings){ 
    alert("Error requesting page: " + settings.url); 
}); 
+0

Açıklama yapmak için ajaxError, ALL ajax hatalarını ele alır, sadece seçici ile eşleşenleri değil. Bir seçici kullanmak sadece bu öğeye başvurmak için geri arama içindeki 'this' anahtar sözcüğünü kullanmanıza izin verir. –

0

bunun kötü bir fikir olduğunu düşünüyorum. Ben $.ajax sarma olduğunu düşünüyorum, ancak yeniden tanımlayan hakkında konuşuyorsunuz. Bunu fark etmeyen herkes beklenmedik sonuçlar doğuracaktır. Diğerleri de belirttiğimiz gibi, bir işleyiciyi $.ajaxError numarasına bağlamanın yolu budur.

0

jQuery, sonra gelen tüm jQuery tabanlı AJAX isteklerine uygulanan seçenekleri ayarlamanızı sağlayan $ .ajaxSetup() adında kullanışlı bir yönteme sahiptir. ana belge hazır fonksiyonunda bu yöntemi yerleştirerek, tüm ayarları otomatik olarak fonksiyonların geri kalanına uygulanan ve

$(function() { 
    //setup ajax error handling 
    $.ajaxSetup({ 
     error: function (x, status, error) { 
      if (x.status == 403) { 
       alert("Sorry, your session has expired. Please login again to continue"); 
       window.location.href ="/Account/Login"; 
      } 
      else { 
       alert("An error occurred: " + status + "nError: " + error); 
      } 
     } 
    }); 
}); 

Referans tek bir yerde olacak: Bir yan not https://cypressnorth.com/programming/global-ajax-error-handling-with-jquery/

İlgili konular