Ai giúp tôi với?
Tôi không thể hiểu sự khác biệt giữa successvà .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 successvà .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ề.
successchỉ 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. errorkích hoạt nếu nó không thành công và completekhi 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, errorvới failvà completevớ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 donehiện nay không được dùng nữa vì Promisecú pháp sử dụng thenthay 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ì asyncvà awaitmở 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 donephù 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 Promisevà 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
successlà 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 $.ajaxcuộc gọi. donethực sự là một phần của jqXHRđối tượng được trả về $.ajax()và thay thế successtrong jQuery 1.8.