Sự khác biệt giữa .success () và .complete ()?


103

Tính đến jQuery 1.5, phương pháp AJAX tất cả của jQuery trả về một jqXHRđối tượng cung cấp .error(), .success().complete()phương pháp.

Sự khác biệt giữa .success()và là .complete()gì?


2
@nix bạn có liên kết mô tả chi tiết hơn về nội dung không dùng nữa không?
neoneye

@neoneye Ctrl + F "deprecation thông báo" trên api.jquery.com/jQuery.ajax/
ThatGuy

Câu trả lời:


223

.success()chỉ được gọi nếu máy chủ web của bạn phản hồi bằng 200 OKtiêu đề HTTP - về cơ bản khi mọi thứ đều ổn.

Tuy nhiên, .complete()sẽ luôn được gọi bất kể lệnh gọi ajax có thành công hay không - có thể nó xuất ra lỗi và trả về lỗi - .complete () sẽ vẫn được gọi.

Điều đáng nói là .complete()sẽ được gọi sau khi .success() được gọi - nếu điều đó quan trọng với bạn.


11

success()được gọi khi máy chủ trả về mã trạng thái 200, complete()luôn được gọi khi yêu cầu hoàn tất, bất kể kết quả.


1

success()được gọi khi máy chủ trả về mã trạng thái 200 , complete()được gọi sau success(). và tôi thấy một số khác biệt:

Trên success()bạn không thể nhận chuỗi phản hồi xml mà bạn đang sử dụng $.ajax()và đặt dataType:xml Nhưng trong complete()bạn có thể nhận định dạng chuỗi của tài liệu xml đã đọc bằng cách sử dụng

$.ajax({
url:'??',
dataType:'xml',
oncomplete: function(data,status){
console.log(data.responseText);
}
})

0

success()được gọi khi trở về máy chủ success status code, như: 200, 201, vv

complete()luôn được gọi khi yêu cầu hoàn tất. (không có vấn đề gì, đó là phản hồi thành công / lỗi từ máy chủ.)


Vì thế,

  • khi có successphản hồi từ máy chủ: complete()success()được gọi.
  • khi có errorphản hồi từ máy chủ: complete()error()được gọi.

Bạn có thể sử dụng complete()cho mục đích gì : giả sử trong beforeSend()bạn hiển thị a loader imagevà trong complete(), bạn có thể ẩn điều đó loader image.

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.