Aqui, eu quero fazer tipo aquele combo de estados e cidades em ajax. Lembra?
Pois é. Tudo funciona direitinho, incluzive o xml retorna os valores legal.
Porem, no buscafornecedor.js, arquivo que tem o ajax, quando chega na linha 54.
var dataArray = obj.getElementsByTagName("fornecedor_dados");
A variavel dataArray retorna zero de valor.
Onde será que esta o erro?
Veja o código todo:
function DadosFornecedor(valor,form_get) {
//verifica se o browser tem suporte a ajax
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;
}
}
}
//se tiver suporte ajax
if(ajax) {
//deixa apenas o elemento 1 no option, os outros são excluídos
document[form_get].fornecedor_dados.options.length = 1;
idOpcao = document.getElementById("opcoesfornecedor");
ajax.open("POST", "../global/funcoes_php/buscafornecedor.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
//enquanto estiver processando...emite a msg de carregando
if(ajax.readyState == 1) {
idOpcao.innerHTML = "Carregando...!";
}
//após ser processado - chama função processXMLfornecedores que vai varrer os dados
if(ajax.readyState == 4 ) {
if(ajax.responseXML) {
processXMLfornecedores(ajax.responseXML,form_get);
}
else {
//caso não seja um arquivo XML emite a mensagem abaixo
idOpcao.innerHTML = "Primeiro selecione o fornecedor>>";
}
}
}
//passa o código do fornecedor escolhido
var params = "id_fornece="+valor;
ajax.send(params);
}
}
function processXMLfornecedores(obj,form_get){
//pega a tag fornecedor
var dataArray = obj.getElementsByTagName("fornecedor_dados");
//total de elementos contidos na tag fornecedor
if(dataArray.length > 0) {
//percorre o arquivo XML paara extrair os dados
for(var i = 0; i < dataArray.length; i++) {
var item = dataArray[i];
//contéudo dos campos no arquivo XML
var id = item.getElementsByTagName("id")[0].firstChild.nodeValue;
var nome = item.getElementsByTagName("nome")[0].firstChild.nodeValue;
var razaosocial = item.getElementsByTagName("razaosocial")[0].firstChild.nodeValue;
idOpcao.innerHTML = "Selecione uma das opções abaixo>>";
//cria um novo option dinamicamente
var novo = document.createElement("option");
//atribui um ID a esse elemento
novo.setAttribute("id", "opcoesfornecedor");
//atribui um valor
novo.value = id;
//atribui um texto
novo.text = nome.razaosocial;
//finalmente adiciona o novo elemento
document[form_get].fornecedor_dados.options.add(novo);
}
}
else {
//caso o XML volte vazio, printa a mensagem abaixo
idOpcao.innerHTML = "Primeiro selecione o fornecedor>>";
}
}
Pergunta
Carlos Rocha
Olá pessoal.
Tenho o form abaixo:
<form name="lista_fornecedor" id="lista_fornecedor" action="?acao=preencher"> <table> <tr> <td width="150">Fornecedor:</td> <td > <? $fornecedor_dados= "select id, nome, razaosocial from fornecedores"; $dados_fornecedor= mysql_query($fornecedor_dados); ?> <select name="fornecedor" onChange="DadosFornecedor(this.value,'lista_fornecedor');" size="1" style="width:200px"> <option value="#" selected>Selecione o Fornecedor:</option> <? while(list($id_fornece, $nome_fornecedor, $razao_fornecedor)=mysql_fetch_row($dados_fornecedor)){?> <option value="<?=$id_fornece;?>"><?=$nome_fornecedor.$razao_fornecedor;?></option> <? } ?> </select></td> </tr> <tr> <td width="150">Produtos:</td> <td > <select name="fornecedor_dados" id="fornecedor_dados" size="1" style="width:200px"> <option id="opcoesfornecedor" value="#">Primeiro selecione o Fornecedor!</option> </select> </td> </tr> </table> </form>Aqui, eu quero fazer tipo aquele combo de estados e cidades em ajax. Lembra? Pois é. Tudo funciona direitinho, incluzive o xml retorna os valores legal. Porem, no buscafornecedor.js, arquivo que tem o ajax, quando chega na linha 54.var dataArray = obj.getElementsByTagName("fornecedor_dados");A variavel dataArray retorna zero de valor. Onde será que esta o erro? Veja o código todo:function DadosFornecedor(valor,form_get) { //verifica se o browser tem suporte a ajax 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; } } } //se tiver suporte ajax if(ajax) { //deixa apenas o elemento 1 no option, os outros são excluídos document[form_get].fornecedor_dados.options.length = 1; idOpcao = document.getElementById("opcoesfornecedor"); ajax.open("POST", "../global/funcoes_php/buscafornecedor.php", true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { //enquanto estiver processando...emite a msg de carregando if(ajax.readyState == 1) { idOpcao.innerHTML = "Carregando...!"; } //após ser processado - chama função processXMLfornecedores que vai varrer os dados if(ajax.readyState == 4 ) { if(ajax.responseXML) { processXMLfornecedores(ajax.responseXML,form_get); } else { //caso não seja um arquivo XML emite a mensagem abaixo idOpcao.innerHTML = "Primeiro selecione o fornecedor>>"; } } } //passa o código do fornecedor escolhido var params = "id_fornece="+valor; ajax.send(params); } } function processXMLfornecedores(obj,form_get){ //pega a tag fornecedor var dataArray = obj.getElementsByTagName("fornecedor_dados"); //total de elementos contidos na tag fornecedor if(dataArray.length > 0) { //percorre o arquivo XML paara extrair os dados for(var i = 0; i < dataArray.length; i++) { var item = dataArray[i]; //contéudo dos campos no arquivo XML var id = item.getElementsByTagName("id")[0].firstChild.nodeValue; var nome = item.getElementsByTagName("nome")[0].firstChild.nodeValue; var razaosocial = item.getElementsByTagName("razaosocial")[0].firstChild.nodeValue; idOpcao.innerHTML = "Selecione uma das opções abaixo>>"; //cria um novo option dinamicamente var novo = document.createElement("option"); //atribui um ID a esse elemento novo.setAttribute("id", "opcoesfornecedor"); //atribui um valor novo.value = id; //atribui um texto novo.text = nome.razaosocial; //finalmente adiciona o novo elemento document[form_get].fornecedor_dados.options.add(novo); } } else { //caso o XML volte vazio, printa a mensagem abaixo idOpcao.innerHTML = "Primeiro selecione o fornecedor>>"; } }Eis tambem o php/xml<?php include("../funcoes_php/conexao.php"); $id_fornecedor = $_POST["id_fornece"]; $sql = "SELECT id, nome, razaosocial FROM fornecedores WHERE id = '$id_fornecedor' ORDER BY nome, razaosocial"; $sql = mysql_query($sql); $row = mysql_num_rows($sql); //VERIFICA SE VOLTOU ALGO if($row) { //XML $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $xml .= "<fornecedores>\n"; //PERCORRE ARRAY for($i=0; $i<$row; $i++) { $id = mysql_result($sql, $i, "id"); $nome = mysql_result($sql, $i, "nome"); $razaosocial = mysql_result($sql, $i, "razaosocial"); $xml .= "<fornecedor>\n"; $xml .= "<id_forn>".$id."</id_forn>\n"; $xml .= "<nome>".$nome."</nome>\n"; $xml .= "<razaosocial>".$razaosocial."</razaosocial>\n"; $xml .= "</fornecedor>\n"; }//FECHA FOR $xml.= "</fornecedores>\n"; }//FECHA IF (row) header("Content-type: application/xml; charset=utf-8"); echo $xml; ?>Editado por Carlos RochaLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.