Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

331
Vistas
AJAX .done() regresa antes de que la respuesta real sea exitosa

Tengo el siguiente código que espera a que una solicitud AJAX se complete o sea exitosa y luego se redirigirá a una URL diferente.

Así es como se ve mi solicitud AJAX

 function UploadFile(contoller, File, RecordID, AuxID) { console.log("initialize uploading file: " + RecordID); const formData = new FormData(); formData.append('RecordID', RecordID); formData.append('AuxID', AuxID); formData.append('File', File); return $.ajax({ type: "POST", url: contoller, processData: false, contentType: false, cache: false, enctype: 'multipart/form-data', data: formData, dataType: 'json' }) }

Tengo otra función que llama a la solicitud AJAX y redirige a una URL diferente si la respuesta es exitosa (es decir, el archivo se cargó al servidor con éxito)

 UploadFile(controller, file, ID ).done( // redirects to different url ).fail( console.log("file failed to upload") );

Sin embargo, observo que .done() siempre se ejecuta antes de que el archivo haya terminado de cargarse en el servidor.

Si uso el siguiente código con "éxito", entonces funciona bien. La función de devolución de llamada después del parámetro de éxito solo se llama después de que se haya completado el proceso de carga.

 $.ajax({ type: "POST", url: controller, processData: false, contentType: false, cache: false, enctype: 'multipart/form-data', data: formData, success: () => { // redirects to url }) }, error: function (ret) { }, dataType: 'json' });

Leí en otras publicaciones/documentación que el nuevo jquery reemplaza "éxito" con ".hecho ()", por lo que son básicamente lo mismo, ¿verdad? Sin embargo, no estoy seguro de por qué .done() no funciona para mi código.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tanto el hecho como el error necesitan que se les pasen funciones de devolución de llamada.

$.ajax devuelve un objeto jqXHR. Este objeto contiene los métodos done y fail. De esta documentación tenemos:

diferido.hecho( doneCallbacks [, doneCallbacks] )

donde:

doneCallbacks Tipo: Function() Una función, o matriz de funciones, que se llaman cuando se resuelve el Diferido.

Así que un ejemplo se vería así:

 $.get( "test.php" ).done(function() { alert( "$.get succeeded" ); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda