2013-08-16 28 views
65

Những câu hỏi:jQuery ajax() sử dụng thành công, lỗi và đầy đủ vs .done(), .fail() và luôn luôn()

  1. Chúng ta có nên thay đổi mã hóa của chúng tôi như đề xuất dưới đây?
  2. Có một sự khác biệt giữa .done() & success:, .fail() & error:.always() & complete:?

Lời mở đầu:

tôi đã đặt cùng một cuộc gọi jQuery.ajax, mà tôi đã thực hiện thành công trong quá khứ quá. Một cái gì đó như thế này:

$.ajax(
    { 
     url: someUrl, 
     type: 'POST', 
     data: someData, 
     datatype: 'json', 
     success: function (data) { someSuccessFunction(data); }, 
     error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); } 
    }); 

Trong khi xem nhanh một số tài liệu, tôi đã xem qua một tài liệu tham khảo cho biết rằng cuộc gọi thành công, lỗi và đầy đủ không được dùng nữa cho jQuery 1.8. Để chuẩn bị mã của bạn để loại bỏ cuối cùng, hãy sử dụng jqXHR.done(), jqXHR.fail() và jqXHR.always() để thay thế.

Do đó chúng tôi nên bắt đầu mã hóa một cái gì đó giống như thay vì điều này:

$.ajax("example.php") 
    .done(function (data) { someSuccessFunction(data); }) 
    .fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }) 
    .always(function() { alert("complete"); }); 
+1

tôi thích phương pháp thứ hai ... nơi lời hứa trả về bởi ajax được sử dụng –

+6

Các callbacks không phản đối. Các phương pháp liên quan trên đối tượng jqxhr là. –

+0

Tôi đồng ý với Arun, tôi cũng nghĩ rằng cá nhân đó dễ đọc hơn – Rooster

Trả lời

34

Vâng không có lợi thế để làm điều đó ở chỗ tình hình cụ thể.

Điểm của .done().fail().always() phương pháp là bạn có thể

  1. Đính kèm nhiều bộ xử lý
  2. Làm như vậy ở bất cứ đâu và không chỉ khi gọi $.ajax

Nếu bạn đang ở $.ajax cuộc gọi trang web chỉ gắn các trình xử lý duy nhất thì những lợi thế đó không thực sự được phát huy.

Vì vậy, bạn có thể trả lại lời hứa và những người khác có thể đính kèm trình xử lý của riêng họ.

Ví dụ là plugin sảng khoái sau khi yêu cầu ajax:

$.ajaxPrefilter(function(opt, origOpt, jqxhr) { 
    jqxhr.always(function() { 
     $("[data-plugin]").plugin(); 
    }); 
}); 
+3

FYI - Theo [docs] (http://api.jquery.com/jQuery.ajax/) như của jQuery 1.5, 'complete',' error' và 'success' sẽ chấp nhận một mảng các hàm gọi lại, để bạn có thể đính kèm nhiều trình xử lý. – user9645

+0

cho # 2: các phương pháp này sẽ được sử dụng ở đâu ngoài khi gọi '$ .ajax()'? Những phương pháp này chỉ hoạt động trên máy thu jqxhr? – ahnbizcad

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