Ada yang bisa bantu saya?
Saya tidak dapat memahami perbedaan antara success
dan .done()
dari $.ajax
.
Jika memungkinkan tolong beri contoh.
Ada yang bisa bantu saya?
Saya tidak dapat memahami perbedaan antara success
dan .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.
success
hanya aktif jika panggilan AJAX berhasil, yaitu pada akhirnya mengembalikan status HTTP 200. error
aktif jika gagal dan complete
saat permintaan selesai, terlepas dari keberhasilannya.
Di jQuery 1.8 pada jqXHR
objek (dikembalikan oleh $.ajax
) success
diganti dengan done
, error
dengan fail
dan complete
dengan 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 done
sekarang sudah tidak digunakan lagi karena mendukung Promise
sintaks 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 async
dan await
memperpanjang 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 done
lebih konsisten dengan jQuery lainnya.
.done
adalah tusukan awal jQuery (dan sekarang buntu) pada apa yang menjadi Promise
dan 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
success
adalah callback yang dipanggil saat permintaan berhasil dan merupakan bagian dari $.ajax
panggilan. done
sebenarnya adalah bagian dari jqXHR
objek yang dikembalikan oleh $.ajax()
, dan menggantikan success
di jQuery 1.8.