Ada yang bisa bantu saya?
Saya tidak dapat memahami perbedaan antara successdan .done()dari $.ajax.
Jika memungkinkan tolong beri contoh.
Ada yang bisa bantu saya?
Saya tidak dapat memahami perbedaan antara successdan .done()dari $.ajax.
Jika memungkinkan tolong beri contoh.
Jawaban:
Singkatnya, memisahkan fungsi callback yang berhasil dari fungsi ajax sehingga nanti Anda dapat menambahkan penangan Anda sendiri tanpa mengubah kode asli (pola pengamat).
Temukan informasi lebih rinci dari sini: https://stackoverflow.com/a/14754681/1049184
success: digunakan sebagai parameter dan .success()sebagai metode pada jqXHR. Yang terakhir sudah tidak digunakan lagi, tapi yang pertama adalah pertanyaan OP.
successhanya aktif jika panggilan AJAX berhasil, yaitu pada akhirnya mengembalikan status HTTP 200. erroraktif jika gagal dan completesaat permintaan selesai, terlepas dari keberhasilannya.
Di jQuery 1.8 pada jqXHRobjek (dikembalikan oleh $.ajax) successdiganti dengan done, errordengan faildan completedengan always.
Namun Anda masih bisa menginisialisasi permintaan AJAX dengan sintaks lama. Jadi ini melakukan hal serupa:
// 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"); });
Perubahan ini untuk kompatibilitas dengan objek yang ditangguhkan jQuery 1.5 . Deferred (dan sekarang Promise, yang memiliki dukungan browser asli penuh di Chrome dan FX) memungkinkan Anda untuk melakukan tindakan asinkron:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Rantai fungsi ini lebih mudah dikelola daripada piramida callback bersarang yang Anda dapatkan success.
Namun, harap diperhatikan bahwa donesekarang sudah tidak digunakan lagi karena mendukung Promisesintaks yang menggunakan then:
$.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); });
Ini layak diadopsi karena asyncdan awaitmemperpanjang janji meningkatkan sintaksis (dan penanganan kesalahan):
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, di jQuery 1.8 sudah diganti dengan done. Mereka bekerja dengan cara yang sama, tetapi donelebih konsisten dengan jQuery lainnya.
.doneadalah tusukan awal jQuery (dan sekarang buntu) pada apa yang menjadi Promisedan yang sekarang memiliki dukungan bahasa yang cukup komprehensif. Dalam proyek baru, saya akan menggunakan const response = await fetch(...)sebagai gantinya.
.success() hanya dipanggil jika server web Anda merespons dengan header HTTP 200 OK - pada dasarnya saat semuanya baik-baik saja.
Callback yang dilampirkan ke done () akan diaktifkan saat penangguhan diselesaikan. Callback yang dilampirkan ke fail () akan diaktifkan saat penangguhan ditolak.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
successadalah callback yang dipanggil saat permintaan berhasil dan merupakan bagian dari $.ajaxpanggilan. donesebenarnya adalah bagian dari jqXHRobjek yang dikembalikan oleh $.ajax(), dan menggantikan successdi jQuery 1.8.