Ir para conteúdo

POWERED BY:

Arquivado

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

Nukes

[Resolvido] Código sendo executado várias vezes

Recommended Posts

Galera, sou bem iniciante em Javascript/Ajax/Jquery ... Como metade do mundo rsrs..

 

Enfim, eu tenho um formulário sendo enviado por ajax p/ o PHP fazer a validação...

 

Quando o PHP valida e retorna erro, ok, mostra o alert (que é um alert personalizado). Porém se eu envio novamente o formulário e o PHP retorna erro de novo, o alert é mostrado duas vezes, se eu envio de novo, é mostrado 3x.. E assim vai... Aí se eu coloco todos os dados certos e envio, ele cadastra x vezes no banco de dados...

 

(Não é o problema no alert, pq uso ele da mesma forma em outra área e funciona normalmente...)

 

Alguém tem alguma idéia?

 

Segue o código: (deve tar bem zuado, aceito melhorias)

 

<script type="text/javascript" language="javascript">
function respondeMsg(idMsg) {
   // Quando o formulário for enviado, essa função é chamada
   $("#btnEnviarResposta"+idMsg).click(function() {
   // Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação

var text = $("#text"+idMsg).val();

// Apaga mensagem de erro (se existir)
$("#retorno"+idMsg).html("");


   // Exibe mensagem de carregamento
$("#divResposta"+idMsg).slideUp(300, function() {
	   $("#carregando"+idMsg).fadeIn(300, function () {

   		$.post('paginas/webmail/webmailEnviar.php', {text: text, idMsg: idMsg}, 
	    function(resposta) {
			// Se foi enviado com sucesso, retorna 1
			if (resposta == 1) {
				$('#carregando'+idMsg).fadeOut(300, function() {
						$('#divResposta'+idMsg).html(text);
						$('#divResposta'+idMsg).slideDown();
				});

			} 
			else {
				$.prompt('Ocorreu algum erro. Tente novamente ou entre em contato com a GLP. <br /><br /> Erro(s):<br /> '+resposta,
								{
									buttons:[
											{title: "Ok", value: true}
											],

									submit: function(){
										$('#carregando'+idMsg).fadeOut(300, function () {
									$('#divResposta'+idMsg).slideDown();


								});
									}		
								});

			}
		});
	});
});
});
}
</script>

 

E o formulário:

 

<div id="respostaMsg'.$linha['id_mensagem'].'" class="respostaMsg" style="display: none;">
    <div class="textoResposta" id="divResposta'.$linha['id_mensagem'].'">
     <form method="post" action="javascript: respondeMsg('.$linha['id_mensagem'].');">
	     <textarea id="text'.$linha['id_mensagem'].'" name="content" style="width:100%">
   	             </textarea>
	     <input name="btnEnviar" id="btnEnviarResposta'.$linha['id_mensagem'].'" type="submit" value="Responder" />
     </form>
      </div>
      <div id="carregando'.$linha['id_mensagem'].'" style="display: none;">
           <center><img src="imgs/loading.gif" style="padding: 20px;"/></center>
      </div>
      <div id="retorno'.$linha['id_mensagem'].'"">
      </div>
</div>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aqui:

<form method="post" action="javascript: respondeMsg('.$linha['id_mensagem'].');">

está errado.

 

 

envie no evento onsubmit do formulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, fiz o que você falou, coloquei no OnSubmit e return false depois (to usando ajax pra enviar o form), continua funcionando, mas o problema também continua...

 

Tá bugando tudo esse erro aí... :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, pensei numa coisa aqui.

 

cada vez que você envia, você instancia o plugin $.prompt.

Por isso que na segunda vez que enviar, já vai estar instanciado uma vez, e vai duplicar, assim cada vez somando..

 

 

você precisa de uma forma de "retirar" o plugin do objeto.

Qual o link da documentação do plugin q você usou ?

 

procure uma forma de "remover o plugin".

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, finalmente consegui resolver... Tinha deixado esse problema de lado pra resolver depois, hoje fui dar uma fuçada e descobri o erro.

 

No formulario, eu tinha colocado a opção "onsubmit='executa o script'" ... E o script tinha o ".click" no botão.

 

Ou seja, quando o usuário clicava no botão, executava o javascript e quando o formulário era enviado executava novamente.

 

Obrigado pela ajuda aí!

 

Abraços!

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.