jQuery ajax () sử dụng thành công, lỗi và hoàn thành so với .done (), .fail () và always ()


75

Các câu hỏi :

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

Lời mở đầu :

Tôi đang kết hợp một lệnh gọi jQuery.ajax, mà trước đây tôi cũng đã thực hiện thành công. 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 đã bắt gặp một tài liệu tham khảo cho biết rằng Lệnh gọi lại thành công, lỗi và hoàn chỉnh không được dùng nữa kể từ jQuery 1.8. Để chuẩn bị mã của bạn cho việc xóa cuối cùng, hãy sử dụng jqXHR.done (), jqXHR.fail () và jqXHR.always () để thay thế.

Do đó, chúng ta nên bắt đầu viết những thứ như sau:

$.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
Arun P Johny

8
Các lệnh gọi lại không còn được dùng nữa. Các phương thức liên quan trên đối tượng jqxhr là.

Tôi đồng ý với Arun, cá nhân tôi cũng nghĩ rằng điều đó dễ đọc hơn
Tuổi Dậu,

1
Tôi không tìm kiếm các nhận xét và tuyên bố về sở thích, nhưng muốn hiểu sự khác biệt, nếu có.
PostureOfLearning

14
Đối với những người không biết đối tượng jqxhr là gì, Crazy Train có nghĩa là gì bởi "Các lệnh gọi lại không bị phản đối. Các phương thức liên quan trên đối tượng jqxhr là." là .done()thay thế .success(), .fail()thay thế .error().always()thay thế .complete(). Các .success(), .error().complete() các phương pháp khác với success, errorcomplete tùy chọn cho các .ajax()phương pháp.
ahnbizcad

Câu trả lời:


38

Không có lợi khi làm điều đó trong tình huống cụ thể đó.

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

  1. Đính kèm nhiều trình 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 ở $.ajaxtrang web cuộc gọi chỉ gắn các trình xử lý đơn lẻ thì những lợi thế đó không thực sự phát huy tác dụng.

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à làm mới các plugin sau khi yêu cầu ajax:

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

4
FYI - Theo tài liệu kể từ jQuery 1.5 complete, cài đặt errorsuccesssẽ chấp nhận một loạt các hàm gọi lại, vì vậy bạn có thể đính kèm nhiều trình xử lý.
user9645,

1
cho # 2: những phương thức này sẽ được sử dụng ở đâu khác ngoài khi gọi $.ajax()? Các phương pháp này chỉ hoạt động trên máy thu jqxhr?
ahnbizcad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.