2010-04-23 41 views
39

Tôi phải sửa đổi một dự án được viết bởi người khác. Bởi vì mã là một mớ hỗn độn, tôi không thể thay đổi $ .post() (hoặc thay thế nó bằng $ .ajax()). Những gì tôi cần làm, là để biết nếu bài viết trả về cái gì khác sau đó JSON và trả lại nó.xử lý lỗi với .post()

$.post('balbal.html', json, function(data) { ... my coude ... }, 'json') 

Tôi có thể xem phản hồi bài đăng trong console.log. Có cách nào đơn giản để lấy nó?

Trả lời

13

Có một vài cách để làm điều đó, nhưng nếu bạn không nhận được phản ứng lỗi có sẵn thông qua đối tượng dữ liệu JSON được trả về, bạn có thể sử dụng $.ajaxSetup() để xác định mặc định cho tất cả các cuộc gọi ajax ajax thông qua jQuery. Mặc dù phương thức $.post() không chỉ định một trình xử lý lỗi hoặc gọi lại và chính nó, phương thức $.ajaxSetup() sẽ bắt giữ bất kỳ lỗi ajax nào và thực thi hàm bạn xác định cho nó.

Ngoài ra, cũng có chức năng $.ajaxError() sẽ thực hiện cùng một loại điều.

Lưu ý rằng điều này sẽ không hoạt động nếu phản hồi JSON của bạn được trả về chính xác nhưng có mã lỗi phía máy chủ. Nếu bạn muốn nắm bắt các loại trường hợp này, tốt nhất bạn nên tìm chúng bằng cách sử dụng phương pháp $.ajaxComplete()

+0

nó hoạt động bằng cách thiết lập chức năng lỗi mặc định với $ .ajaxSetup() ... – meo

2

Bạn có thể sử dụng $.ajax() ($.post là phím tắt kết thúc bằng cách gọi điện thoại), và xác định lỗi gọi lại.

Hoặc, nếu bạn thực sự không muốn làm điều đó, hãy gọi

$.ajaxError(function(){ 
    //error handler 
}) 

trước đó $.post

+0

không có lỗi gọi lại trên $ .post()? – meo

+0

http://api.jquery.com/jQuery.post/ Không có lỗi xử lý trong '$ .post' vì nó chỉ là một phương pháp tắt để lưu gõ. – Victor

+0

tôi đã thử ajaxError nhưng nó seams không thực hiện. Tôi nhận được một hình thức trả lời bài viết nhưng nó, một lỗi php và không phải là json tôi mong đợi. – meo

97

Xác định lỗi gọi lại ngay sau bài đăng. Lưu ý vị trí bán kết tràng chỉ ở cuối.

$.post('balbal.html', json, function(data) { 
    // ... my code ... 
}) 
.fail(function(response) { 
    alert('Error: ' + response.responseText); 
}); 

http://api.jquery.com/deferred.fail/

Đối với phiên bản cũ của jQuery (pre-1,8) Sử dụng .error thay vì với cú pháp tương tự.

+6

+1 Brilliant :) – Usman

+0

Sẽ rất tuyệt khi nhận được thông báo lỗi thực sự, nhưng điều này là tuyệt vời hơn so với – John

+5

@John và bất cứ ai đến đây trong trong tương lai, nếu bạn làm .fail (res), bạn có thể làm res.responseText để truy cập thông báo lỗi. –