Ir para conteúdo
Fórum Script Brasil
  • 0

Ajax - Laço for não completa loop


Paulada

Pergunta

Olá pessoal!

Tenho uma dificuldade que anda me tirando o sono e se puderem me ajudar, agradeço.

Antes, farei um apanhado básico para que entendam o meu procedimento.

Tenho em um sistema uma tabela Pagamento, outra chamada Item_Pagamento e mais uma chamada de nome Conta. No meu formulário, preciso associar várias contas que estão na tabela Conta a um determinado pagamento que está na tabela Pagamento. Esta associação é feita na tabela Item_Pagamento.

O que faço nestas funções?

  1. Na função salvarItemPgto(), pego o valor de todos os ítens do tipo checkbox de nome itempgto.
  2. Perrcorro a lista de ítens de nome itempgto e quando estão "checados" como true, chamo a função verificaRegistroItem_Pgto(itempgto.value,cd_pagamento) para ver se aquele registro já existe no banco.
  3. Se o registro já existir, não faço nada e continuo percorrendo a lista de checkbox, se não existir, chamo a função inserirItem_Pgto(Dados.cd_conta,Dados.cd_pagamento) para inserir um ítem na tabela Item_Pagamento e depois continuo percorrendo a lista de checkbox.
O que está acontecendo de errado(Qual o meu problema):

Toda a vez que marco mais de um checkbox, ele deveria fazer a varredura em todos os checkbox, ir verificando quem está marcado como true e que não existe no banco e em seguida, inserir no banco, mas o que acontece é que se eu marcar 2 checkbox por exemplo, quando eu clicar no botão Incluir Contas, ele só insere o primeiro que está marcado, e caso eu queira inserir o segundo, tenho que clicar novamente no botão Incluir Contas e assim por diante. No entanto, se eu "encher o código de alert" para ir ver onde está o erro, este erro não acontece, pois desta maneira, basta apenas eu clicar uma vez em Incluir Contas que ele inclui todos os registros marcados perfeitamente.

O que eu já tentei fazer:

  • Me disseram que é porque o Ajax é assíncrono, mas mesmo eu colocando false no atributo Async, não rola.
  • Coloquei uma simulação de sleep para ver se quando o código executa mais devagar ele rola, mas isto também não funcionou.
SistemaPag2.jpg

Função que percorre os ítens do tipo checkbox e chama as funções para verficação.

function salvarItemPgto(){    
    var cd_pagamento = document.getElementById('cd_pagamento').value;    
    var itempgto = document.getElementsByName('itempgto');
        
    if(cd_pagamento != ""){
        for(i=0;i<itempgto.length;i++){
            if(itempgto[i].checked == true){                
                verificaRegistroItem_Pgto(itempgto[i].value,cd_pagamento);                
            }
            else{                
                document.getElementById('aviso').innerHTML = "<p>Este item já existe ou não está marcado</p>";                
            }                        
        }
    }
    else {
        document.getElementById('aviso').innerHTML = "<p>Deve existir um Pagamento em aberto!</p>";
    } 
}
Função utilizada para verificar se registro já existe e se não existir, chama a função de inserir no Banco
function verificaRegistroItem_Pgto(cd_conta,cd_pagamento){
        
   
    AJAX.Url = '../requisicoes/phpItemPgto.php';
    AJAX.Metodo = 'POST';        
    AJAX.DadosSend = 'strAcao=cmdVerifica';
    AJAX.DadosSend+= '&cd_pagamento='+cd_pagamento;
    AJAX.DadosSend+= '&cd_conta='+cd_conta;    
    AJAX.AjaxExecute(true);
    AJAX.CallBack = function(Dados){      
        if(Dados.status==1){
            document.getElementById('aviso').innerHTML = Dados.strResposta;            
        }
        else 
            if(Dados.status==0){
                document.getElementById('aviso').innerHTML = Dados.strResposta;                                                                
                inserirItem_Pgto(Dados.cd_conta,Dados.cd_pagamento);  
            }         
        }     
}
Função para inserção do registro no banco
function inserirItem_Pgto(cd_conta,cd_pagamento){
    
    AJAX.Url = '../requisicoes/phpItemPgto.php';
    AJAX.Metodo = 'POST';    
    AJAX.DadosSend = 'strAcao=cmdIncluir';
    AJAX.DadosSend+= '&cd_pagamento='+cd_pagamento;
    AJAX.DadosSend+= '&cd_conta='+cd_conta;    
    AJAX.AjaxExecute(true);
    AJAX.CallBack = function(Dados){
        if(Dados.status==1){
            document.getElementById('aviso').innerHTML = Dados.strResposta;            
        }
        else{
            document.getElementById('aviso').innerHTML = Dados.strResposta;          
        }
    }    
}

:mellow:

Editado por Paulada
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...