successha sido el nombre tradicional de la devolución de llamada exitosa en jQuery, definida como una opción en la llamada ajax. Sin embargo, desde la implementación de $.Deferredsdevoluciones de llamada más sofisticadas, donees la forma preferida de implementar devoluciones de llamada exitosas, ya que se puede invocar en cualquiera deferred.
Por ejemplo, el éxito:
$.ajax({
  url: '/',
  success: function(data) {}
});
Por ejemplo, hecho:
$.ajax({url: '/'}).done(function(data) {});
Lo bueno donees que el valor de retorno de $.ajaxahora es una promesa diferida que puede vincularse a cualquier otro lugar de su aplicación. Digamos que desea hacer esta llamada ajax desde diferentes lugares. En lugar de pasar en su función de éxito como una opción para la función que hace que esta llamada AJAX, sólo puede tener la función de retorno $.ajaxa sí mismo y se unen sus devoluciones de llamada con done, fail, then, o lo que sea. Tenga en cuenta que alwayses una devolución de llamada que se ejecutará si la solicitud tiene éxito o falla. donesolo se activará en caso de éxito.
Por ejemplo:
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
});
Un beneficio importante de esto en términos de mantenibilidad es que ha incluido su mecanismo ajax en una función específica de la aplicación. Si decide que necesita su $.ajaxllamada para operar de manera diferente en el futuro, o usa un método ajax diferente, o se aleja de jQuery, solo tiene que cambiar la xhr_getdefinición (asegúrese de devolver una promesa o al menos un donemétodo, en El caso del ejemplo anterior). Todas las demás referencias en la aplicación pueden seguir siendo las mismas.
Hay muchas cosas más (mucho más geniales) con las que puede hacer $.Deferred, una de las cuales es usar pipepara desencadenar una falla en un error informado por el servidor, incluso cuando la $.ajaxsolicitud en sí misma tiene éxito. Por ejemplo:
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
});
Lea más sobre $.Deferredaquí: http://api.jquery.com/category/deferred-object/
NOTA : A partir de jQuery 1.8, pipeha quedado en desuso a favor de usarlo thenexactamente de la misma manera.
                 
                
success:/.done(), en todo caso. Por ejemplo, ¿success:solo se implementa como el primero en.done()estos días?success:y.doneen una llamada ajax? Buena pregunta. Como todas las demás devoluciones de llamada se llaman en el orden en que están vinculadas, supongo que sí,successsolo se llama primero.pipees uno en el que la solicitud en sí tiene éxito pero el script en el servidor no devolvió lo que estaba buscando. Es posible que no desee arrojar un 404 o 500 real o lo que sea en el lado del servidor porque desea distinguir significativamente entre las respuestas http y las respuestas de la aplicación. Establecer un código de respuesta en el JSON y luego usarlo depipeesta manera le permite manejar diferentes tipos de errores con más matices.Si necesita
async: falseen su ajax, debe usar ensuccesslugar de.done. De lo contrario, es mejor usar.done. Esto es del sitio oficial de jQuery :fuente
async:false?$.ajax({ url: req_url, ..., async: false, success: function (result, status, req) { }, error: function (jqXHR, status) { } });Los objetos jqXHR devueltos por
$.ajax()jQuery 1.5 implementan la interfaz Promise, dándoles todas las propiedades, métodos y comportamiento de una Promesa (consulte Objeto diferido para obtener más información). Estos métodos toman uno o más argumentos de función que se invocan cuando$.ajax()finaliza la solicitud. Esto le permite asignar múltiples devoluciones de llamada en una sola solicitud, e incluso asignar devoluciones de llamada después de que la solicitud se haya completado. (Si la solicitud ya está completa, la devolución de llamada se activa inmediatamente). Los métodos de Promesa disponibles del objeto jqXHR incluyen:Una construcción alternativa a la opción de devolución de llamada exitosa, consulte los
deferred.done()detalles de implementación.Una construcción alternativa a la opción de devolución de llamada de error, el
.fail()método reemplaza el método .error () en desuso. Consulte deferred.fail () para obtener detalles de implementación.(agregado en jQuery 1.6) Una construcción alternativa a la opción de devolución de llamada completa, el
.always()método reemplaza el.complete()método en desuso .En respuesta a una solicitud exitosa, los argumentos de la función son los mismos que los de
.done(): data, textStatus y el objeto jqXHR. Para solicitudes fallidas, los argumentos son los mismos que los de.fail(): el objeto jqXHR, textStatus y errorThrown. Consultedeferred.always()para detalles de implementación.Incorpora la funcionalidad de los métodos
.done()y.fail(), lo que permite (a partir de jQuery 1.8) manipular la promesa subyacente. Consulte diferido.then()para obtener detalles de implementación.fuente