¿Alguien me puede ayudar?
No puedo entender la diferencia entre success
y .done()
de $.ajax
.
Si es posible, den ejemplos.
¿Alguien me puede ayudar?
No puedo entender la diferencia entre success
y .done()
de $.ajax
.
Si es posible, den ejemplos.
En resumen, función de devolución de llamada de desacoplamiento de la función ajax para que luego pueda agregar sus propios controladores sin modificar el código original (patrón de observador).
por favor, encontrar información más detallada de aquí: https://stackoverflow.com/a/14754681/1049184
Y debajo de él, el ejemplo muestra la equivalencia de done => success, fail => error y always => complete – StuartLC
Esta respuesta pierde el sentido. Hay una diferencia entre 'success:' usado como parámetro y '.success()' como método en 'jqXHR'. Este último está en desuso, pero el primero es lo que el OP estaba preguntando. – Alnitak
Success/error/complete están en desuso y en función de los cambios de estado de AJAX; done/fail/always se basan en jQuery Cambios de estado diferidos. Ver http://api.jquery.com/category/deferred-object/. – mickeyreiss
success
solo se activa si la llamada AJAX tiene éxito, es decir, devuelve un estado HTTP 200. error
se dispara si falla y complete
cuando finaliza la solicitud, independientemente de su éxito.
En jQuery 1.8 en la jqXHR
objeto (devuelto por $.ajax
) success
se reemplazó con done
, error
con fail
y complete
con always
.
Sin embargo, todavía debe ser capaz de inicializar la solicitud AJAX con la sintaxis anterior. Por lo que 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 para la compatibilidad con jQuery 1.5 de deferred object. Diferidos (y ahora Promise
, que cuenta con el apoyo del navegador nativa completa en Chrome y FX) que permiten a la cadena de acciones asíncronos:
$.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 jerarquizada de las devoluciones de llamada que se obtiene con success
.
Sin embargo, tenga en cuenta que done
ahora es obsoleto en favor de la sintaxis Promise
que utiliza 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); });
Esto vale la pena adoptar porque async
y await
se extienden promesas mejora de sintaxis (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);
}
creación de funciones antes de realizar la solicitud y establecer la función después de realizar la solicitud. Parece que ambos son lo mismo ... ¿me mostrarán algunas otras diferencias? – suhailvs
@suhail - en realidad no hay ninguno; en jQuery 1.6 hubo 'success', en jQuery 1.8 que ha sido reemplazado por' done'. Funcionan de la misma manera, pero 'done' es más consistente con el resto de jQuery. – Keith
success
es la devolución de llamada que se invoca cuando la solicitud tiene éxito y es parte de la llamada $.ajax
. done
es en realidad parte del objeto jqXHR
devuelto por $.ajax()
, y reemplaza success
en jQuery 1.8.
.success()
solo recibe una llamada si su servidor web responde con un encabezado HTTP 200 OK, básicamente cuando todo está bien.
Las devoluciones de llamada asociadas a done() se dispararán cuando se resuelva el aplazamiento. Las devoluciones de llamada asociadas a fail() se dispararán cuando se rechace el diferido.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
Vale la pena señalar que .success() NO recibe una llamada cuando el JSON malformado se envía de vuelta con un código de estado 200/OK. Específicamente, me encontré con un problema con el código backend del servidor web que genera valores NaN y serialándolos como javascript NaN (es decir, como un símbolo, no cadena 'NaN') que en realidad no es JSON válido, por lo que el análisis de la respuesta como JSON falla y se ejecuta .fail(), pero el estado de respuesta es 200. Pero sigue siendo cierto que el éxito SÓLO se llama con un código de estado correcto; solo quería señalar que solo porque está bien, no significa que sea 'exitoso';) – Kasapo
¿Dónde leíste sobre un método done() de $ .ajax()? AFAIK el método hecho está relacionado con el objeto $. Diferido. ¿Tal vez estás hablando de .complete() en su lugar? – fcalderan
en http://api.jquery.com/jQuery.ajax/page –
ok, es jQuery 1.8 :) Como $ .ajax devuelve una promesa de jQuery 1.5, esta es una simple sustitución por una cuestión de consistencia (utilizando la interfaz de diferido): done() tiene lugar de success(), falla() para error() y siempre() para completar() – fcalderan