successajax çağrısında bir seçenek olarak tanımlanan jQuery'de başarılı geri aramanın geleneksel adı olmuştur. Ancak, $.Deferredsgeri çağrıların uygulanması ve daha karmaşık doneolması nedeniyle, herhangi bir şekilde çağrılabileceğinden, başarı geri çağrılarını uygulamanın tercih edilen yoludur deferred.
Örneğin, başarı:
$.ajax({
url: '/',
success: function(data) {}
});
Örneğin, yapıldı:
$.ajax({url: '/'}).done(function(data) {});
Bununla ilgili güzel bir şey done, dönüş değerinin $.ajaxartık başvurunuzda başka herhangi bir yere bağlanabilecek ertelenmiş bir vaat olmasıdır. Diyelim ki bu ajax çağrısını birkaç farklı yerden yapmak istiyorsunuz. Aksine bu ajax çağrı yapan işlevine bir seçenek olarak başarı işlevinde geçen daha, sadece fonksiyon getirisine sahip olabilir $.ajaxkendisi ve bağlama ile geri aramalar done, fail, then, ya da her neyse. alwaysBu isteğin başarılı olup olmadığını çalıştıracak bir geri arama olduğunu unutmayın . doneyalnızca başarı ile tetiklenir.
Örneğin:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json',
beforeSend: showLoadingImgFn
})
.always(function() {
// remove loading image maybe
})
.fail(function() {
// handle request failures
});
}
xhr_get('/index').done(function(data) {
// do stuff with index data
});
xhr_get('/id').done(function(data) {
// do stuff with id data
});
Bunun sürdürülebilirlik açısından önemli bir yararı, ajax mekanizmanızı uygulamaya özgü bir fonksiyona sarmış olmanızdır. $.ajaxÇağrınızın gelecekte farklı şekilde çalışmasına ihtiyacınız olduğuna veya farklı bir ajax yöntemi kullandığınıza karar verirseniz veya jQuery'den uzaklaşırsanız, yalnızca xhr_gettanımı (bir söz veya en azından bir doneyöntem döndürdüğünüzden emin olarak ) yukarıdaki örnek için). Uygulamadaki diğer tüm referanslar aynı kalabilir.
Yapabileceğiniz çok daha fazla (çok daha serin) şey var $.Deferred, bunlardan biri pipe, $.ajaxisteğin kendisi başarılı olsa bile, sunucu tarafından bildirilen bir hatada bir hatayı tetiklemek için kullanmaktır . Örneğin:
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json'
})
.pipe(function(data) {
return data.responseCode != 200 ?
$.Deferred().reject( data ) :
data;
})
.fail(function(data) {
if ( data.responseCode )
console.log( data.responseCode );
});
}
xhr_get('/index').done(function(data) {
// will not run if json returned from ajax has responseCode other than 200
});
$.DeferredBurada daha fazla bilgi bulabilirsiniz: http://api.jquery.com/category/deferred-object/
NOT : jQuery 1.8 itibariyle , aynı şekilde pipekullanılması lehine kullanımdan kaldırılmıştır then.
success:/.done()Varsa , etkileşimlerinin nasıl tanımlandığını merak ediyorum . Örneğin, bu günlerdesuccess:ilk olarak.done()mı uygulanıyor ?