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

105
Visualizações
jquery ajax diferido

He revisado todos los temas sobre esto, creo.

Tengo una función que usa jquery para actualizar un registro a través de ajax. Necesito cambiarlo para hacerlos y esperar a que termine cada uno.

He estado leyendo sobre $.Deferred y he intentado implementarlo, pero el código aún no espera. Entiendo que ajax es asíncrono y no quiero cambiar eso como tal, pero quiero que espere, ya que el código genera mensajes y los necesito en orden.

Mi código es como tal:

 //do the export: function doExport(id) { var exportComplete = $.Deferred(); var exportPromise = $.ajax({ type: "POST", url: "import.php", dataType: "json", data: { id: id } }); exportPromise.done(function(msg) { //msg contains the text from the import exportComplete.resolve(msg); }); return exportComplete.promise(); } //export all ticked items (from a list) function importInvoices() { var checked = new Array; $('#apiCall').html(""); //put all checked items into an array (id corresponds to a PK in the db) $("input[name=selectedRow]:checked").each(function(num,row) { checked.push($(row).data('id')); }); //loop through each checked item $(checked).map(function(num, id) { console.log("starting " + id) ; var prom = doExport(id).then(function(result) { console.log("done " + id); $('#apiCall').html($("#apiCall").html() + result.messages); }); }); $("#pleaseWaitContainer").hide(); }

Debe estar muy cerca, pero creo que falta algo o está en el lugar equivocado. El texto de la exportación resultante aparece donde debería, pero si (por ejemplo) selecciono 3 facturas, obtengo el texto de la consola "iniciando xxx" 3 veces y luego "terminado xxx" cuatro veces.

Como esto:

 starting 243 starting 663 starting 823 done 243 done 663 done 823

Mientras que lo que quiero es

 starting 243 done 243 starting 663 done 663 starting 823 done 823

Cualquier consejo sería apreciado con cariño ... Me estoy arrancando el pelo limitado.

cris

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Llamada exitosa

 const checked = $("input[name=selectedRow]:checked").map(function() { return $(this).data('id')) }).get() const load = function() { $.ajax({ url: `/someprocess.php?id=${checked.shift()}&otherparm=bla`, success: function() { if (checked.length > 0) load() } }) } if (checked.length > 0) load(); // start
about 4 years ago · Juan Pablo Isaza 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