Ir para conteúdo

POWERED BY:

Arquivado

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

Zinhani

[Resolvido] Ajax com bug no IE

Recommended Posts

Olá pessoal,

 

Primeiro quero pedir desculpas para o autor desse codigo, resolvi mexer nele essa semana e não lembro mais de onde foi que eu peguei, infelizmente nao tenho como postar os créditos.

 

Bom, o script parece ser simples e é usado para carregar um select a partir do resultado de um select anterior. Muito usado em casos de Cidade/Estado.

 

O problema é que ele esta funcionando perfeitamente no Firefox e Chrome atualizados mas não esta funcionando no IE tbm atualizado.

 

Eu não sei muita coisa de JS e portanto não faço a menor ideia do pq isso estar acontecendo.

 

Vou postar os codigos e se alguem puder dar uma dica ficarei muito grato.

 

 

 

Dados do Form

 

<select name="uf" id="uf" onChange="Dados(this.value);">
   <option value="">-- Selecione seu Estado --</option>
   <option value="ID DO ESTADO"> NOME DO ESTADO </option>
</select>

<select name="cidade" id="cidade">
   <option id="opcoes" value="">-- Primeiro selecione o Estado --</option>
</select>

 

Arquivo: cidade_estado.js

 

function Dados(valor) {
	try {
		ajax = new ActiveXObject("Microsoft.XMLHTTP");
	} catch(e) {
		try {
			ajax = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(ex) {
			try {
				ajax = new XMLHttpRequest();
			} catch(exc) {
				alert("Esse browser não tem recursos para uso do Ajax");
				ajax = null;
			}
		}
	}
	if(ajax) {
		document.nova1.cidade.options.length = 1;
		idOpcao  = document.getElementById("opcoes");
		ajax.open("POST", "cidade_estado.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.onreadystatechange = function() {
			if(ajax.readyState == 1) {
				idOpcao.innerHTML = "Carregando...!";   
			}
			if(ajax.readyState == 4 ) {
				if(ajax.responseXML) {
					processXML(ajax.responseXML);
				} else {
					idOpcao.innerHTML = "-- Primeiro selecione o Estado --";
				}
			}
		}
		var params = "estado="+valor;
		ajax.send(params);
	}
}
function processXML(obj){
	var dataArray = obj.getElementsByTagName("cidade");
	if(dataArray.length > 0) {
		for(var i = 0 ; i < dataArray.length ; i++) {
		var item = dataArray[i];
		var codigo  = item.getElementsByTagName("codigo")[0].firstChild.nodeValue;
		var descricao = item.getElementsByTagName("descricao")[0].firstChild.nodeValue;
			idOpcao.innerHTML = "-- Selecione a sua Cidade --";
		var novo = document.createElement("option");
			novo.setAttribute("id", "opcoes");
			novo.value = codigo;
			novo.text = descricao;
		document.nova1.cidade.options.add(novo);
		}
	} else {
		idOpcao.innerHTML = "-- Primeiro selecione o Estado --";
	}	  
}

 

Arquivo: cidade_estado.php

 

//CONECTA AO MYSQL
$conn = mysql_connect("localhost", "XXXXXXXXX", "XXXXXXXXX") or die("Erro na conexão com a base de dados");

//SELECIONA A BASE DE DADOS
$db = mysql_select_db("XXXXXXXXX", $conn) or die("Erro na seleção da base de dados");
		 
//RECEBE PARÃMETRO
$pEstado = $_POST["estado"];

//QUERY
$sql = "SELECT a.id, a.nome FROM cidades a WHERE a.id_uf=".$pEstado." ORDER BY a.nome";

//EXECUTA A QUERY
$sql = mysql_query($sql);
$row = mysql_num_rows($sql);

//VERIFICA SE VOLTOU ALGO
if($row) {

//XML
$xml  = "<?php xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$xml .= "<cidades>\n";

//PERCORRE ARRAY
for($i=0; $i<$row; $i++) {
	$codigo    = mysql_result($sql, $i, "nome");
	$descricao = mysql_result($sql, $i, "nome");
	$xml .= "<cidade>\n";
	$xml .= "<codigo>".$codigo."</codigo>\n";
	$xml .= "<descricao>".$descricao."</descricao>\n";
	$xml .= "</cidade>\n";
}
$xml.= "</cidades>\n";

//CABEÇALHO
Header("Content-type: application/xml; charset=iso-8859-1");
}

//PRINTA O RESULTADO
echo $xml;

 

Obrigado!!!

 

Ninguem sabe como eu posso identificar o pq de uma aplicação funcionar perfeitamente em um navegador e não funcionar em outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar,

 

Sem querer coloquei um 'php' no lugar no 'xml' e ai nao sei pq o IE nao responde

//XML
$xml  = "<?php xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";

O certo é:

//XML
$xml  = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";

Resolvido.

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.