Ir para conteúdo

POWERED BY:

Arquivado

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

Pablo.p48l0

AJAX + XML + False = Erro

Recommended Posts

Olá amigos,

 

Tentarei explicar de forma simples. Estou tentando obter uma página XML através do ajax, e jogá-la em seguida no meu form... O que acontece, é que como o modo assincrono está true, então antes que ele busque os dados e o objXML fique pronto, ele já tenta jogar os dados no form, aí dá erro, pq "não deu tempo" de aprontar o XML. Colocando o assincrono como false, o que seria a logica, funciona perfeitamente bem, mas não no FireFox, hehe.. Minha solução foi uma 'gambiarra', colocando a função de preenchimento do form embaixo da que gera o XML, pois ai so a chamaria depois de pronta. A pergunta é, não tem como saber se o objXML já está pronto "olhando" de fora? Tentei uns loops infinitos e umas funções de teste do status do ajax, mas nada... Segue o codigo. Grande abraço a todos.

 

var Ajax = false; var objTXT = ""; tms = new Array(); var objXML = new Object();						function AjaxRequest() {		if(window.XMLHttpRequest) {			Ajax = new XMLHttpRequest();		}		else if(window.ActiveXObject) {			try {				Ajax = new ActiveXObject("Msxml2.XMLHTTP");			}			catch (e) {				try {					Ajax = new ActiveXObject("Microsoft.XMLHTTP");				}				catch (e) {}			}		}	}		//FUNÇÃO QUE ABRE UMA PÁGINA AJAX POR GET	function abreAjaxGet(url,id_div_result,modo) {				if(typeof(modo)=="undefined") modo = 'TXT';		if(typeof(id_div_result)=="undefined") id_div_result = 'divConteudoPrincipal';				url = antiCacheRand(url);				AjaxRequest();		if(!Ajax) {			document.getElementById('divTxtRodape').innerHTML = '[Erro !Ajax]';			return;		}		Ajax.onreadystatechange = function(){			if(Ajax.readyState == 4) {				if(Ajax.status == 200) {					document.getElementById('divTxtRodape').innerHTML = '';											if(modo == 'TXT') {						document.getElementById(id_div_result).innerHTML = Ajax.responseText;					}					else if(modo == 'XML') {						objXML = Ajax.responseXML;						//testeXML(Ajax.responseXML);					}				}				else {					document.getElementById('divTxtRodape').innerHTML = '[Erro mostraPagina]';										}			}		}		document.getElementById('divTxtRodape').innerHTML = '<img src="../imagens/ico_aguarde.gif">';		Ajax.open('GET', url, true);		Ajax.setRequestHeader("Content-Type", "text/html; charset=ISO-8859-1");		Ajax.send(null);	}			//FUNÇÃO QUE RETORNA O XML FOR AJAX	function retornaXmlObj(arquivo,cod_objeto,sis_objeto,tipo_objeto,id_div_result){		var url; 		url = arquivo+'.php?sis_controle=xml&cod_objeto='+cod_objeto+'&sis_objeto='+sis_objeto+'&tipo_objeto='+tipo_objeto;		abreAjaxGet(url,id_div_result,'XML');	}		//FUNÇÃO QUE PREENCHE O FORM COM OS DADOS RETORNADOS PELO XML	function insereXMLForm(id_form,nome_arquivo,tbl_objeto,cod_objeto,sis_objeto,tipo_objeto) {				if(cod_objeto) {					var obj = document.getElementById(id_form);						retornaXmlObj(nome_arquivo,cod_objeto,sis_objeto,tipo_objeto);			********************************************************************************************** NESSE MOMENTO ELE TENTA CRIAR O ARRAY DO XML, MAS O OBJXML NÃO TAH PRONTO************************************************************************************			var dataArray = objXML.getElementsByTagName(tbl_objeto);			var item = dataArray[0];						for(var i = 0; i < obj.length; i++){ 					var nomeCampo = obj.elements[i].id;								if (obj.elements[i].type == "radio"){					if(item.getElementsByTagName(nomeCampo.substring(5))[0])						if (obj.elements[i].value == item.getElementsByTagName(nomeCampo.substring(5))[0].firstChild.nodeValue) {							obj.elements[i].checked = true;						}						else obj.elements[i].checked = false;				}				else if (obj.elements[i].type != "submit"){					//alert(obj.elements[i].id);					//alert(nomeCampo.substring(5));					if(item.getElementsByTagName(nomeCampo.substring(5))[0])						obj.elements[i].value = item.getElementsByTagName(nomeCampo.substring(5))[0].firstChild.nodeValue;				}								} 				}			}

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.