2010-07-27 25 views
12

Tôi muốn cảnh báo người dùng bất cứ khi nào có lỗi AJAX. Bạn có thể làm điều này thông qua $.ajaxSetup:

$.ajaxSetup({ 
    error: function() { 
    alert("OOPS!") 
    } 
}); 

But the jQuery docs recommend against this:

Lưu ý: chức năng gọi lại toàn cầu nên được thiết lập với tương ứng toàn cầu Ajax xử lý sự kiện họ phương pháp-.ajaxStart(), .ajaxStop (), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend() - thay vì so với đối tượng cài đặt cho $ .ajaxSetup().

Vì vậy, tôi đoán tôi là nghĩa vụ phải làm điều này:

$("#some_random_div").ajaxError(function() { 
    alert("OOPS!") 
}); 

này không có ý nghĩa với tôi: gọi lại lỗi AJAX gắn liền với ứng dụng của tôi như một toàn thể, không phải là một yếu tố trang cụ thể . Vậy tại sao hàm gọi lại được liên kết với một phần tử trang riêng lẻ?

Vì vậy: tại sao tài liệu jQuery khuyên bạn nên sử dụng những gì trông giống như một phương pháp ít đọc được hơn và cách tiếp cận nào là tốt nhất?

+0

Tôi thích ajaxSetup cho mục đích này. – Kris

Trả lời

7

Việc sử dụng điển hình là các yếu tố trang cụ thể mà bạn gắn ajaxError để được div nơi thông báo lỗi của bạn sẽ được hiển thị ; có lẽ là một thông điệp "flash" div ở đầu trang của bạn. Bằng cách này, bạn có quyền truy cập trực tiếp vào div đó để nối thêm tin nhắn của bạn.

Nhưng nếu bạn không sử dụng một phần tử DOM cụ thể làm khu vực hiển thị thông báo của mình, bạn chắc chắn có thể liên kết nó với $(document) hoặc một số yếu tố toàn cầu khác như vậy.

+2

jQuery 1.9, các sự kiện ajax chỉ nên được sử dụng trên 'tài liệu', vì vậy nó nên đọc như' $ (document) .ajaxError (function() {...}) 'hoặc' $ (document) .on ("ajaxError ", function() {...})'. Lý do các tài liệu nói không sử dụng '$ .ajaxSetup()' cho điều này là chúng chỉ là các thiết lập * mặc định * cho một yêu cầu; bất kỳ yêu cầu nào định nghĩa trình xử lý 'error' của riêng nó sẽ ghi đè một bộ trong' $.ajaxSetup() 'có lẽ không phải là thứ bạn muốn. –

0

Bạn có thể dây lên hàm sai số cho toàn bộ cơ thể như thế này:

$('body').ajaxError(function() { 
    alert("OOPS!") 
}); 
+1

Nhưng không phải là ít có thể đọc được hơn phương pháp 'ajaxSetup()'? Tức là, chức năng ở đây có * không có gì * với cơ thể của tài liệu (theo cách khác, nếu tôi có thể đạt được hiệu ứng chính xác bằng cách thay thế "body" cho * bất kỳ * phần tử nào khác, điều này có vẻ như cách tiếp cận sai) –

0

Có thể tồn tại những trường hợp có thể liên quan đến điều khiển riêng lẻ - chẳng hạn như khi bạn tự động hoàn thành các chuyến đi khứ hồi tới cơ sở dữ liệu qua ajax, trái ngược với toàn bộ trang như gửi. Điều này sau đó sẽ xác định xem bạn có muốn tách biệt lỗi trên một thành phần của trang hay không và nếu vậy thì phản hồi cho lỗi sẽ thay vì với cách tiếp cận chung chung hơn.


2

Các tài liệu nhà nước:

Tính đến jQuery 1.8, phương pháp này .ajaxError() chỉ nên được gắn liền với tài liệu .

http://api.jquery.com/ajaxError/

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