Biri bana yardım edebilir mi?
Ben arasındaki farkı anlamak mümkün değilim successve .done()bir $.ajax.
Mümkünse lütfen örnekler verin.
Biri bana yardım edebilir mi?
Ben arasındaki farkı anlamak mümkün değilim successve .done()bir $.ajax.
Mümkünse lütfen örnekler verin.
Yanıtlar:
Kısacası, başarı geri arama işlevini ajax işlevinden ayırarak, daha sonra orijinal kodu (gözlemci kalıbı) değiştirmeden kendi işleyicilerinizi ekleyebilirsiniz.
Lütfen buradan daha ayrıntılı bilgi bulun: https://stackoverflow.com/a/14754681/1049184
success: Bir parametre olarak kullanılan ve .success()bir yöntem olarak kullanılan arasında bir fark vardır jqXHR. İkincisi kullanımdan kaldırılıyor, ancak ilki OP'nin sorduğu şey.
successyalnızca AJAX çağrısı başarılı olursa tetiklenir, yani sonuçta bir HTTP 200 durumu döndürür. errorBaşarısız olursa ve completeistek tamamlandığında, başarıya bakılmaksızın tetiklenir.
İlgili jQuery 1.8 içinde jqXHRbir nesne ile (geri $.ajax) successile değiştirildi done, errorile failve completeile always.
Ancak yine de AJAX isteğini eski sözdizimi ile başlatabilmeniz gerekir. Yani bunlar benzer şeyler yapar:
// 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"); });
Bu değişiklik, jQuery 1.5'in ertelenmiş nesnesiyle uyumluluk içindir . Ertelenmiş (ve artık PromiseChrome ve FX'te tam yerel tarayıcı desteğine sahip olan), eşzamansız eylemler zincirlemenize olanak tanır:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Bu işlev zincirinin bakımı, birlikte aldığınız iç içe geçmiş bir geri arama piramidinden daha kolaydır success.
Ancak, bunun yerine kullanılan sözdizimi donelehine artık kullanımdan kaldırıldığını lütfen unutmayın :Promisethen
$.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); });
Bu değer benimseyerek çünkü asyncve awaitsözler geliştirilmiş sözdizimi (ve hata işleme) uzatmak:
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);
}
successjQuery 1.8'de yerini done. Aynı şekilde çalışırlar, ancak donejQuery'nin geri kalanıyla daha tutarlıdırlar.
.doneolduğu konusundaki erken (ve şimdi çıkmaz) bıçağıydı Promiseve şimdi oldukça kapsamlı bir dil desteğine sahip. Yeni projelerde const response = await fetch(...)bunun yerine kullanırdım.
.success() yalnızca web sunucunuz 200 OK HTTP başlığıyla yanıt verirse çağrılır - temelde her şey yolunda olduğunda.
Done () öğesine eklenen geri aramalar, ertelenmiş çözüm çözüldüğünde tetiklenecektir. Fail () 'e eklenen geri aramalar, ertelenen reddedildiğinde tetiklenecektir.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
successistek başarılı olduğunda çağrılan ve $.ajaxaramanın bir parçası olan geri aramadır. doneaslında jqXHRtarafından döndürülen nesnenin bir parçasıdır $.ajax()ve successjQuery 1.8'de yerini alır .