2010-01-18 29 views
39

jQuery hàm lỗi AJAX có các thông số sau:Bắt cơ thể phản ứng AJAX để sử dụng trong callback lỗi

error(XMLHttpRequest, textStatus, errorThrown) 

cách qua trình duyệt tốt nhất để có được cơ thể phản ứng là gì?

Tính năng này có hoạt động (đáng tin cậy trong tất cả các trình duyệt) không?

$.ajax({ 
    error: function(http) { 
    alert(http.responseText); 
    } 
}); 
+0

http.responseText hoạt động trên tất cả các trình duyệt hiện đại và trình xử lý lỗi được kích hoạt cho tất cả các lỗi trạng thái HTTP 4xx và 5xx. Bạn có thể thay đổi cách xử lý lỗi bằng cách kiểm tra mã trạng thái HTTP có thể truy cập dưới dạng 'http.status' –

Trả lời

-4

Có một chức năng ẩn mà có thể trích xuất các dữ liệu từ XHR istance:

var responseText = $.httpData(xhr) 

Nếu bạn vượt qua "json" như một tham số thứ hai nó sẽ đối xử với các phản ứng như là một chuỗi JSON.

Lưu ý rằng bạn có thể gặp lỗi vì không có phản hồi (ví dụ như sự cố mạng). Hãy chắc chắn rằng bạn bao gồm trường hợp đó là tốt. Ngoài ra, tôi tin (không chắc chắn) jQuery gọi trình xử lý error nếu máy chủ trả về trạng thái 4xx hoặc 5xx.

+4

Cảm ơn bạn. Đánh giá từ nguồn có vẻ như 'xhr.responseText' sẽ hoạt động với dữ liệu HTML thông thường –

+23

Dường như chức năng' $ .httpData' đã mất ít nhất là jQuery 1.5.2. – dowski

+4

−1 để sử dụng các tính năng không có giấy tờ. – rightfold

67

Tính đến jQuery 1.4.1 bạn nên sử dụng:

var json = JSON.parse(xhr.responseText); 

Xem http://api.jquery.com/jQuery.parseJSON/.

+3

Sau khi đảm bảo, tất nhiên, loại nội dung thực sự là JSON. –

+0

Ahem ... Có. :-) – dowski

+2

Nó bây giờ nói, "Như của jQuery 3.0, $ .parseJSON không được chấp nhận. Để phân tích cú pháp các chuỗi JSON sử dụng phương thức JSON.parse nguyên gốc để thay thế." – JHS

17

Đối với một câu trả lời gần đây và tổng quát hơn (vì jquery 1.5), tôi muốn sử dụng đối tượng jqXHR:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    alert(jqXHR.responseText); 
}) 

Ngoài ra responseJSON thể được sử dụng để có được cơ thể phản ứng đã phân tích cú pháp

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR.responseJSON); 
}) 
0

Một ví dụ sử dụng đơn giản với jQuery:

var url = '/'; 
$.get(url).then(
    function(response) { 
     $("#result").html(response); 
    }, 
    function(jqXHR) { 
    $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status); 
    } 
); 

Điều này sẽ trả về HTML của trang chủ hiện tại của trang web.

Sau đó thử nhập URL vô nghĩa không tồn tại và thấy lỗi được ném. Bạn sẽ nhận được thông báo "404 Not Found" từ máy chủ web. Kiểm tra nó: JSFiddle here

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