Ai giúp tôi với?
Tôi không thể hiểu sự khác biệt giữa success
và .done()
của $.ajax
.
Nếu có thể xin vui lòng cho ví dụ.
Ai giúp tôi với?
Tôi không thể hiểu sự khác biệt giữa success
và .done()
của $.ajax
.
Nếu có thể xin vui lòng cho ví dụ.
Câu trả lời:
Nói tóm lại, tách hàm gọi lại thành công khỏi hàm ajax để sau này bạn có thể thêm các trình xử lý của riêng mình mà không cần sửa đổi mã gốc (mẫu người quan sát).
Vui lòng tìm thêm thông tin chi tiết tại đây: https://stackoverflow.com/a/14754681/1049184
success:
được sử dụng như một tham số và .success()
như một phương thức trên a jqXHR
. Cái thứ hai đang không được chấp nhận, nhưng cái trước là những gì OP đã hỏi về.
success
chỉ kích hoạt nếu lệnh gọi AJAX thành công, tức là cuối cùng trả về trạng thái HTTP 200. error
kích hoạt nếu nó không thành công và complete
khi yêu cầu kết thúc, bất kể thành công.
Trong jQuery 1.8, jqXHR
đối tượng (được trả về bởi $.ajax
) success
được thay thế bằng done
, error
với fail
và complete
với always
.
Tuy nhiên, bạn vẫn có thể khởi tạo yêu cầu AJAX với cú pháp cũ. Vì vậy, chúng làm những điều tương tự:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax( "..." )
.done(function() { alert("success"); });
Thay đổi này là để tương thích với đối tượng hoãn lại của jQuery 1.5 . Được hoãn lại (và bây giờ Promise
, có hỗ trợ trình duyệt gốc đầy đủ trong Chrome và FX) cho phép bạn chuỗi các hành động không đồng bộ:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Chuỗi chức năng này dễ duy trì hơn một kim tự tháp lồng ghép các lệnh gọi lại mà bạn nhận được success
.
Tuy nhiên, xin lưu ý rằng done
hiện nay không được dùng nữa vì Promise
cú pháp sử dụng then
thay thế:
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
Điều này đáng được áp dụng vì async
và await
mở rộng hứa hẹn cải thiện cú pháp (và xử lý lỗi):
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
success
, trong jQuery 1.8 đã được thay thế bằng done
. Chúng hoạt động theo cùng một cách, nhưng done
phù hợp hơn với phần còn lại của jQuery.
.done
Đó là cú đâm sớm (và bây giờ là bế tắc) của jQuery với những gì đã trở thành Promise
và hiện đã hỗ trợ ngôn ngữ khá toàn diện. Trong các dự án mới, tôi sẽ sử dụng const response = await fetch(...)
thay thế.
.success()
chỉ được gọi nếu máy chủ web của bạn phản hồi với tiêu đề 200 OK HTTP - về cơ bản khi mọi thứ đều ổn.
Các lệnh gọi lại được đính kèm với done () sẽ được kích hoạt khi việc trì hoãn được giải quyết. Các lệnh gọi lại được đính kèm với fail () sẽ được kích hoạt khi lệnh hoãn bị từ chối.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
là lệnh gọi lại được gọi khi yêu cầu thành công và là một phần của $.ajax
cuộc gọi. done
thực sự là một phần của jqXHR
đối tượng được trả về $.ajax()
và thay thế success
trong jQuery 1.8.