El objeto Deferred es una característica poco conocida de jQuery que permite escribir menos código. Veamos como aprovecharlo.
Todas las funciones AJAX en jQuery retornan un Deferred, y por lo tanto:
$.ajax({url:'/api/users', success:function(d){console.log(d)}});
se puede escribir como:
$.ajax({url:'/api/users'}).done(function(d){console.log(d)})
El cambio es sutil pero simplifica algunos casos engorrosos. Por ejemplo esperar el resultado de multiples llamadas AJAX:
var usersRequest = $.get('/api/users');
var settingsRequest = $.get('/api/settings');
jQuery.when(usersRequest, settingsRequest).done(function (users, settings) {
console.log(users);
console.log(settings);
});
O simplificar código mediante null objects:
var request = (shouldUpdate) ? $.post('/api/user', userData)
El cambio es sutil pero simplifica algunos casos engorrosos. Por ejemplo esperar el resultado de multiples llamadas AJAX:
var usersRequest = $.get('/api/users');
var settingsRequest = $.get('/api/settings');
jQuery.when(usersRequest, settingsRequest).done(function (users, settings) {
console.log(users);
console.log(settings);
});
O simplificar código mediante null objects:
var request = (shouldUpdate) ? $.post('/api/user', userData)
: jQuery.Deferred().resolve();
request.done(function() { doSomething() });
request.done(function() { doSomething() });