Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] Onde será que esta o erro?

Recommended Posts

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;            
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não tem nenhuma tag chamada:

getElementsByTagName("fornecedor_dados");

apenas:

$xml .= "<fornecedor>\n";

e:

$xml .= "<nome>".$nome."</nome>\n";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as devidas alterções e ocorre agora outro erro, um tanto que estranho.

 

Quando eu escolho, na combo, o fornecedor zemario por exemplo, se eu quiser escolher outro não dá pois quando vou abrir a combo não tem nenhum lá mais. somem todos.

html

<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>

js

  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.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");

  //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_forn    =  item.getElementsByTagName("id_forn")[0].firstChild.nodeValue;
		var nomerazao =  item.getElementsByTagName("nomerazao")[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_forn;
			//atribui um texto
		    novo.text  = nomerazao;
			//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>>";
  }	  
  }

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 .= "<nomerazao>".$nome.$razaosocial."</nomerazao>\n";         
     $xml .= "</fornecedor>\n";    
  }//FECHA FOR                 

  $xml.= "</fornecedores>\n";

}//FECHA IF (row)                                               
  header("Content-type: application/xml; charset=utf-8");
echo $xml;            
?>

Como sai dessa agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, não entendi.

 

Abra no Firefox, faça o onchange, e aperta Ctrl+Shif+J

corrija os erros que aparecerem.

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.