Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

330
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda