2016-03-15 18 views
6

Tôi có một yêu cầu sau đây jQuery bài:jQuery bài không gọi lại không hiển thị đáp ứng cho mã 400

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

Trong file ajax.php của tôi khi họ gặp khó khăn tôi trở HTTP mã phản hồi 400 với một thông điệp:

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

Khi tôi kiểm tra phản hồi cho cuộc gọi bị lỗi trong trình duyệt của mình, tôi có thể thấy mã trạng thái Status Code:400 Bad Request và văn bản phản hồi tôi đã chuyển trong thông báo lỗi. Nhưng cuộc gọi lại .fail của jQuery không hiển thị số response của tôi.

Tôi làm cách nào để có quyền truy cập vào văn bản phản hồi không thành công/lỗi?

EDIT

tôi kiểm tra mã của tôi và .fail callback được kích hoạt, tôi chỉ có thể không nhận được thông điệp trả lời được hiển thị.

Trả lời

7

Bạn cần phải sử dụng jqXHR:

Các jQuery XMLHttpRequest (jqXHR) đối tượng được trả về bởi $ .ajax() tại ngày jQuery 1.5 là một superset của quê hương đối tượng XMLHttpRequest của trình duyệt. Ví dụ, nó chứa các thuộc tính responseText và responseXML , cũng như phương thức getResponseHeader(). Khi cơ chế vận chuyển là một cái gì đó khác với XMLHttpRequest (ví dụ , một thẻ tập lệnh cho một yêu cầu JSONP), đối tượng jqXHR mô phỏng chức năng XHR khi có thể.

.fail là một trong những phương pháp Promise có sẵn của đối tượng jqXHR,

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

Bạn có thể sử dụng responseText tài sản để nhận được thông báo lỗi như:

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

tham khảo: http://api.jquery.com/jquery.ajax/#jqXHR

+0

Đã thử điều này - không có hiệu lực. – Gacek

+0

'trở lại console.log (jqXHR)' là gì? – KAD

+2

Rất tiếc, trình duyệt của tôi đã giữ phiên bản cũ của tệp js. Nó hoạt động sau khi làm mới cứng. Xin lỗi đã làm phiền. – Gacek

0

Tôi luôn luôn sử dụng 500 cho một mã lỗi ajax và nó thường được chọn bởi .fail cho tôi. API JQ cho .post có một danh sách dài các liên kết lồng nhau mô tả cách chúng xử lý đối tượng JqXHR và cách nó tương tác với JQ như một tổng thể.

Vì bạn không kích hoạt .fail với trạng thái của mình, bạn có thể kiểm tra thành công mã trạng thái cụ thể của bạn trong hàm .success hoặc .done như vậy.

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

Ưu điểm của việc thực hiện kiểm tra của riêng bạn trong .done hoặc .success là bạn có thể xác định một số hành vi tiện lợi cho trạng thái khác nhau mà bạn muốn trở về từ máy chủ của bạn. Có nghĩa là hàng chục cách khác nhau để xử lý trả về ajax và xác định các hành vi gọi lại.

** Đây là một câu hỏi SO khác có một số độ phân giải khác.

jQuery AJAX Error Handling (HTTP Status Codes)

** Cú pháp ở đây là hơi khác nhau vì câu hỏi này tập trung vào các phương pháp .ajax thay vì .post, nhưng những ý tưởng và giải pháp đề xuất vẫn phải làm việc.

+0

Tôi đã thử mã 500 cũng, không có hiệu lực - nó không được chọn bởi jQuery. – Gacek

Các vấn đề liên quan