[RESOLVIDO]Duvida sobre AJAX no JQuery

5 respostas
E

Bom dia pessoal, estou com um problema simples mas que esta me tirando o sono.

Uma aplicação legada que tenho que dar manutenção, onde, ao clicar duas vezes seguidas no botão de submit o registro é duplicado. Preciso fazer com que o clique no submit fique desabilitado até que a chamada ajax termine e retorne.

O AJAX_LOADER_BLOCKER esta habilitado, mas é possível dar 2 ou 3 cliques rápidos antes que apareça.

O botão.disabled=true; não funcionou, acredito que é pq se trata de um link.

O projeto é feito em Struts 1, com jquery e jdbc.

function salvarAtendimento(){
	
	if (controleSalvar) {
		return;
	}

	if(validarAtendimento()){
		validarPeriodoAgenda(function(){
			$("#codEmpresa").removeAttr("disabled");
			$("#codAgente").removeAttr("disabled");
			$("#documentoCliente").removeAttr("disabled");
			$("#nomeRep").removeAttr("disabled");
			$("#representantes").removeAttr("disabled");
			$("#nomeEmpreendimento").removeAttr("disabled");
			$("#codTipoCliente").removeAttr("disabled");
			var serializedForm = $("#atendimentoForm").serialize();

			controleSalvar = true;
			Ajax.JSONRequest('./SalvarAtendimento.do', serializedForm , function(data){

				if(data.status){
					$("#codAtendimento").val(data.codAtendimento);
					if($("#numeroAtendimentoHidden").val() == '1' || $("#numeroAtendimentoHidden").val() == '4'){
						responderDiagnostico($("#codDiagnostico").val(), $("#codClienteRep").val(), $("#codAtendimento").val());
					}else{
						if($("#numeroAtendimentoHidden").val() == '3' || $("#numeroAtendimentoHidden").val() == '6'){
							registrarSolucoes($("#codDiagnostico").val(), $("#codAtendimento").val());
						}else{
							$("#voltarAtend").click();
						}
					}


				}else{
					 jError(data.msg, data.exception, function(){

	                 });
				}
				
				controleSalvar = false;
				alert("false");
			}, Ajax.constants.AJAX_LOADER_BLOCKER);
		});
	}
}

Note que implementei uma variável controleSalvar para tentar impedir o duplo submit, mas aparentemente o JS não espera a resposta do AJAX e segue a execução do script, por isso não funcionou.

Alguém poderia me dar uma luz? Obrigado

5 Respostas

Mickdark

Olá ezaack, você pode tentar criar uma variavel global (fora do escopo da function) e incrementar a cada chamada do evento, caso seja 1 faça o procedimento, caso contrário nem precisa colocar nada se não quiser que aconteça nada!!

Ex:

var click=0;
$(".link").click(function(event){
    click++;
    if(click==1){
        //Coloque tudo que vai fazer
        click=0;
    }

});

Caso clique mais de uma vez ele não ira efetuar o que estiver dentro do if até terminar

E

Mickdark:
Olá ezaack, você pode tentar criar uma variavel global (fora do escopo da function) e incrementar a cada chamada do evento, caso seja 1 faça o procedimento, caso contrário nem precisa colocar nada se não quiser que aconteça nada!!

Ex:

var click=0;
$(".link").click(function(event){
    click++;
    if(click==1){
        //Coloque tudo que vai fazer
        click=0;
    }

});

Caso clique mais de uma vez ele não ira efetuar o que estiver dentro do if até terminar

Opa, vou testar e posto o resultado. Obrigado

lele_vader

o jquery tem 2 funções chamadas, ajax start e ajax stop para quando uma função ajax inicia e quando termina

E

Funcionou, muito obrigado

Mickdark

Funcionou o ajax.stop ou o método que eu passei?

Criado 10 de abril de 2013
Ultima resposta 11 de abr. de 2013
Respostas 5
Participantes 3