success
ajax çağrısında bir seçenek olarak tanımlanan jQuery'de başarılı geri aramanın geleneksel adı olmuştur. Ancak, $.Deferreds
geri çağrıların uygulanması ve daha karmaşık done
olması 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 $.ajax
artı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 $.ajax
kendisi ve bağlama ile geri aramalar done
, fail
, then
, ya da her neyse. always
Bu isteğin başarılı olup olmadığını çalıştıracak bir geri arama olduğunu unutmayın . done
yalnı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_get
tanımı (bir söz veya en azından bir done
yö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
, $.ajax
isteğ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
});
$.Deferred
Burada daha fazla bilgi bulabilirsiniz: http://api.jquery.com/category/deferred-object/
NOT : jQuery 1.8 itibariyle , aynı şekilde pipe
kullanı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 ?