¿Alguien puede ayudarme?
No puedo entender la diferencia entre successy .done()de $.ajax.
Si es posible, dé ejemplos.
¿Alguien puede ayudarme?
No puedo entender la diferencia entre successy .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.
successsolo se activa si la llamada AJAX es exitosa, es decir, finalmente devuelve un estado HTTP 200. errorse activa si falla y completecuando finaliza la solicitud, independientemente del éxito.
En jQuery 1.8 en el jqXHRobjeto (devuelto por $.ajax) successfue reemplazado con done, errorcon faily completeconalways .
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 doneahora está en desuso a favor de la Promisesintaxis que usa en su thenlugar:
$.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 asyncy awaitextender 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 donees más coherente con el resto de jQuery.
.donela primera (y ahora callejón sin salida) de jQuery sobre lo que se convirtió Promisey 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
successes la devolución de llamada que se invoca cuando la solicitud es exitosa y es parte de la $.ajaxllamada. donees en realidad parte del jqXHRobjeto devuelto por $.ajax()y reemplaza successen jQuery 1.8.