Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nilson Jr. (@mandachuvamg)

jQuery - Loop do each não aguarda retorno da requisição ajax

Recommended Posts

Prezados boa tarde,

 

Ao realizar requisições ajax dentro de um $.each (do jQuery), a próxima iteração do loop acontece antes que a requisição termine, fazendo com que várias requisições fossem enviadas e executadas ao mesmo tempo. Existe a propriedade async = false que poderia ajudar, já que com ela as requisições são executadas separadamente, mas continuam sendo enviadas todas juntas. Neste caso é essencial que as requisições fossem enviadas separadamente para que o usuário possa acompanhar o processamento, etc.

 

Vejam:

$.each(json,function(index, value){
   $('#processamento #status').html('<b>'+index+'</b> convênio(s) processado(s)... verificando saldo do convênio: '+value);

   loaderProgresso = (index*100)/loaderTotal; //porcentagem processada
   $("progress").val(loaderProgresso); //atualiza barra de progresso
   $("#loader").text(loaderProgresso+'% processado');

   $.ajax({
        url: "../ajax/setVerificaSaldo.php",
        dataType: "json",
        type: "POST",
        data: {'convenio':value, 'anoDe':anoDe, 'anoAte':anoAte},
        success: function(json){
           if(json && json.msg){
              $('#processamento #log').html(json.msg);
           }
       },
    });
});

Alguém sabe algum parâmetro ou forma de executar essas requisições separadamente, uma à uma.

 

Desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

com promise ou deferred

vc tem q enviar a próxima, só quando a primeia volta? ou pode ser tudo em paralelo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma idéia..

$('button').click(function()
{
     // dados json
     var json = [{"id":"A"},{"id":"B"},{"id":"C"}];
     var data = [];
     $.each(json, function(i, item){
	// popula array
	data.push( item.id );
     });
     // ver o tamanho
     var total = data.length;
     // inicio
     var i = -1;
     // envia requisição
     var AjaxSend = function(){
	i += 1;
	$.ajax({
	     url: 'processa.php',
	     data: 'id=' + data[i]
	}).done(function( response ){
	     // resposta
	     $('body').append( response );
	}).always(function(){
	     // após a 1 requisição ser processada
	     // espera 1 seg. antes de enviar a próxima.
	     var timeout = setTimeout( AjaxSend, 1000 );
	     // encerra após enviar todos
	     if( i == (total-1) ) clearTimeout( timeout );
	});
	
     }
     // inicia
     AjaxSend();
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.