Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

334
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!