¿Alguien puede ayudarme?
No puedo entender la diferencia entre success
y .done()
de $.ajax
.
Si es posible, dé ejemplos.
¿Alguien puede ayudarme?
No puedo entender la diferencia entre success
y .done()
de $.ajax
.
Si es posible, dé ejemplos.
Respuestas:
En resumen, desacoplar la función de devolución de llamada exitosa de la función ajax para que luego pueda agregar sus propios controladores sin modificar el código original (patrón de observador).
Encuentre información más detallada desde aquí: https://stackoverflow.com/a/14754681/1049184
success:
usado como parámetro y .success()
como método en un jqXHR
. El último está siendo desaprobado, pero el primero es sobre lo que estaba preguntando el OP.
success
solo se activa si la llamada AJAX es exitosa, es decir, finalmente devuelve un estado HTTP 200. error
se activa si falla y complete
cuando finaliza la solicitud, independientemente del éxito.
En jQuery 1.8 en el jqXHR
objeto (devuelto por $.ajax
) success
fue reemplazado con done
, error
con fail
y complete
conalways
.
Sin embargo, aún debería poder inicializar la solicitud AJAX con la sintaxis anterior. Entonces estos hacen cosas similares:
// 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"); });
Este cambio es por compatibilidad con el objeto diferido de jQuery 1.5 . Diferido (y ahora Promise
, que tiene soporte completo para navegadores nativos en Chrome y FX) le permite encadenar acciones asincrónicas:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Esta cadena de funciones es más fácil de mantener que una pirámide anidada de devoluciones de llamada con la que obtiene success
.
Sin embargo, tenga en cuenta que done
ahora está en desuso a favor de la Promise
sintaxis que usa en su then
lugar:
$.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); });
Vale la pena adoptar esto porque async
y await
extender promete una sintaxis mejorada (y manejo de errores):
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
, en jQuery 1.8 que ha sido reemplazado por done
. Funcionan de la misma manera, pero done
es más coherente con el resto de jQuery.
.done
la primera (y ahora callejón sin salida) de jQuery sobre lo que se convirtió Promise
y que ahora tiene un soporte de lenguaje bastante completo. En nuevos proyectos, usaría const response = await fetch(...)
en su lugar.
.success()
solo se llama si su servidor web responde con un encabezado HTTP 200 OK, básicamente cuando todo está bien.
Las devoluciones de llamada adjuntas a done () se activarán cuando se resuelva el aplazado. Las devoluciones de llamada adjuntas a fail () se activarán cuando se rechace el aplazado.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
es la devolución de llamada que se invoca cuando la solicitud es exitosa y es parte de la $.ajax
llamada. done
es en realidad parte del jqXHR
objeto devuelto por $.ajax()
y reemplaza success
en jQuery 1.8.