Ir para conteúdo
Fórum Script Brasil
  • 0

Onde será que esta o erro?


Carlos Rocha

Pergunta

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 Rocha
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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?

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...