2016-03-15 19 views
6

:jQuery sonrası geri arama kodu için tepkisini göstermez başarısız bir aşağıdaki jQuery sonrası isteği var 400

: Ben bir mesajla HTTP yanıt kodu 400 döndürür şeyler yanlış gittiğinde benim ajax.php dosyasında

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(response){ 
      $("#error").html(response); 
    } 
); 

header("HTTP/1.0 400 Error"); 
echo "Some error message"; 
exit(); 

Tarayıcımda hatalı arama yanıtını kontrol ettiğimde, Status Code:400 Bad Request durum kodunu ve hata mesajında ​​ilettiğim yanıt metnini görebiliyorum. Ancak jQuery'nin .fail geri araması, response numaralı telefonumu görüntülemiyor.

Hata/hata yanıt metnine nasıl erişebilirim?

DÜZENLEME benim kod test edilmiş ve .fail geri arama tetiklediği, sadece tepki iletisi görüntülenirken olsun olamaz.

cevap

7

Sen jqXHR kullanmak gerekir:

jQuery XMLHttpRequest (jqXHR) nesnesi jQuery 1.5 tarayıcının yerli XMLHttpRequest nesnenin bir üst kümesidir itibarıyla $ .ajax() tarafından döndürülen. Örneğin, responseText ve responseXML özelliklerinin yanı sıra getResponseHeader() yöntemini içerir. aktarım mekanizması XMLHttpRequest ( örneğinde, JSONP isteği için bir komut dosyası etiketi) dışında bir şey olduğunda, jqXHR nesnesi, mümkün olduğunda özgün XHR işlevselliğini simüle eder.

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(jqXHR, textStatus, errorThrown) { 
      $("#error").html(jqXHR.responseText); 
    } 
); 

Referans: http://api.jquery.com/jquery.ajax/#jqXHR

.fail

biri jqXHR nesnenin mevcut Promise yöntemleri,

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});

Sen olarak hata mesajları almaya responseText özelliğini kullanabilirsiniz olduğu

+0

Bunu denedi - etki yok. – Gacek

+0

'console.log (jqXHR)' ne döndürüyor? – KAD

+2

Üzgünüm, tarayıcım js dosyasının eski versiyonunu tuttu. Sert yenilendikten sonra çalıştı. Rahatsız ettiğim için özür dilerim. – Gacek

0

Her zaman ajax başarısızlık kodu için 500 kullanıyorum ve genellikle benim için .fail tarafından alınır. JQ API for .post, JqXHR nesnesini nasıl ele aldıklarını ve bir bütün olarak JQ ile nasıl etkileşim kurduğunu açıklayan uzun bir iç içe geçmiş bağlantılar listesine sahiptir.

Durumunuzla birlikte .fail'i tetiklemediğinizden, başarı durumunuzu .success veya .done işlevinde özel durum kodunuzu kontrol edebilirsiniz.

//post stuff 
.success(function(response){ 
    if(response.status == 400){ 
     //error stuff 
    } 
}); 

.done veya .success kendi kontroller avantajı size sunucudan iade etmek istiyorum farklı durum için bazı hoş davranışlar tanımlayabilirsiniz olmasıdır. Ajax iadelerini işlemek ve geri arama davranışlarını tanımlamak için tam anlamıyla onlarca farklı yol vardır.

** Başka bazı kararları olan başka bir soru var.Bu soru yerine .post ait .ajax yöntemine odaklanmış, ancak önerilen fikirleri ve kararları hala çalışması gerekir çünkü

jQuery AJAX Error Handling (HTTP Status Codes)

** Burada sözdizimi biraz farklıdır.

+0

Kod 500 de denedim, hiçbir etkisi - jQuery tarafından seçilmez. – Gacek

İlgili konular