Ir para conteúdo

POWERED BY:

Arquivado

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

Claudio Neto

[Resolvido] Erro em função usando Ajax e submit

Recommended Posts

Boa tarde a todos.

 

Tenho uma função que está enviando dados para dois locais, uma página local e um servidor remoto.

Para a página local, estou usando Ajax e depois mando um submit para o servidor remoto.

 

Só que por algum motivo, o ajax não está conseguindo enviar os dados, acredito eu que o submit esteja acontecendo muito rápido e anulando a execução do Ajax.

Segue abaixo a função:

 

function confereNumeros(){
var numeros = document.preparadados.fone;
var tipos = document.preparadados.tipo;
var qtdNumeros = numeros.length;
var alerta = "";

//alert(qtdNumeros);
if(qtdNumeros > 0){
	for(var i= 0; i < qtdNumeros; i++){
		if(numeros[i].value.length != 10){
			alerta += 'O número na posição '+ (i+1) + ' é inválido.\n';
		}else if(tipos[i].value == 'fixo' && numeros[i].value.charAt(2) > 5){
			alerta += 'O número na posição '+ (i+1) + ' deve ser um número fixo.\n';
		}else if(tipos[i].value == 'movel' && numeros[i].value.charAt(2) < 6){
			alerta += 'O número na posição '+ (i+1) + ' deve ser um número móvel.\n';
		}
	}
}else{
	if(numeros.value.length != 10){
		alerta += 'O número digitado é inválido.\n';
	}else if(tipos.value == 'fixo' && numeros.value.charAt(2) > 5){
		alerta += 'O número digitado deve ser um número fixo.\n';
	}else if(tipos.value == 'movel' && numeros.value.charAt(2) < 6){
		alerta += 'O número digitado deve ser um número móvel.\n';
	}
}

if(alerta!=''){
	alert(alerta);
}else{
	document.preparadados.datasiguais.checked = false;
	igualaDatas();

	//envia os dados via ajax para atualizar o banco local
	var objAjax = createXMLHTTP();

	var nomeTag = '';
	var tipoTag = '';
	var valorTag = '';

	var valores = '';
	//alert(document.preparadados.elements.length);
	//roda todos os elementos do form para enviar a pagina de insercaoo
	for(var i = 0; i < document.preparadados.elements.length; i++){
		tag = document.preparadados.elements[i].tagName.toUpperCase();
		tipoTag = document.preparadados.elements[i].type.toUpperCase();
		valorTag = document.preparadados.elements[i].value.toUpperCase();
		nomeTag = document.preparadados.elements[i].name.toUpperCase();

		//alert(tag+'  '+tipoTag+'  '+nomeTag);
		if((tag == 'INPUT' && (tipoTag == 'TEXT' || tipoTag == 'HIDDEN')) || tag == 'SELECT'){
			valores += nomeTag +'='+ valorTag+'&';
		}
	}
	alert(valores);

	objAjax.open("post", "agenda_acao.asp", true);
	objAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	objAjax.onreadystatechange=function(){
		if (objAjax.readyState==4){
			//alert(objAjax.responseText);
		}
	}
	objAjax.send(valores);

	//envia os dados para o servidor de discagem
	document.preparadados.action = 'http://189.20.47.73:82/belltelemensagens/envia_mensagens.php';
	document.preparadados.submit();
}
}

 

Se eu desativar o submit, o Ajax funciona, então acredito que se tivesse como dar um intervalo entre uma execução e outra resolveria, mas não encontrei como fazer isso.

 

Alguém pode me ajudar?

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites
se tivesse como dar um intervalo entre uma execução e outra resolveria, mas não encontrei como fazer isso.

veja sobre o metodo setTimeout()

 

ainda assim, 'feio' fazer isso hein?!

manda 2 ajax e pronto. Se um dos servidores demorar mais pra responder do que você previu, ai já era..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, essa teria a solução que eu teria tomado se fosse possível enviar dados via Ajax para servidores remotos. O Ajax, por segurança, só conversa com páginas de mesmo domínio (como você mesmo me ensinou, rs).

 

Cheguei a postar aqui quando estava procurando uma solução, mas não consegui usar:

http://forum.imasters.com.br/index.php?/topic/414434-acessar-pagina-de-outro-servidor/

 

Obrigado.

 

o Timeout resolveu o problema perfeitamente.

 

Obrigado mais uma vez.

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.