[Resolvido] Ajax com bug no IE
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.
Discussão (1)
Carregando comentários...