Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 10:15

Galera to a horas procurando a resposta para isso, mas até agora nada...

Funciona assim: No arquivo index.php, o usuário atraves de um botão insere nova linha de campos, esses campos são select's que chamam uma função dinamica via ajax chamada requisicaoHTTP, que por sua vez está tratando cada Select carregando o seu conteudo, o tratamento é feito em um arquivo externo que faz uma consulta no banco para trazer os dados de cada select chamado de query_marcas.

O Erro está ocorrendo justamente na linha: onchange='Javascript:requisicaoHTTP('GET','query_marcas.php?id=' + this.value + '&',true,trataMarca);'

Só está indo até a inserção da linha, mas a função requisicaoHTTP não é chamada. Vamos lá:

index.php

<script type="text/javascript">     // BIBLIOTECA     var ajax;     var dadosUsuario;       function requisicaoHTTP(tipo,url,assinc,trata)     {        if(window.XMLHttpRequest){        ajax = new XMLHttpRequest();        }        else if(window.ActiveXObject){        ajax = new ActiveXObject("Msxml2.XMLHTTP");                if(!ajax){           ajax = new ActiveXObject("Microsoft.XMLHTTP");           }        }         if (ajax)       iniciaRequisicao(tipo,url,assinc,trata);     else     alert("Seu navegador não possui suporte a essa aplicação");     }       function iniciaRequisicao(tipo,url,bool,trata){           ajax.onreadystatechange=trata;           ajax.open(tipo,url,bool,trata);           ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=UTF-8");           //ajax.overrideMimeType("text/XML");           ajax.send(dadosUsuario);     }       function enviaDados(url){     criaQueryString();     requisicaoHTTP("POST",url,true);     }       function criaQueryString(){        dadosUsuario="";        var frm = document.forms[0];        var numElementos = frm.elements.length;        for(var i=0; i < numElementos; i++){          if(i < numElementos-1){             dadosUsuario += frm.elements[i].name+"=" +             encodeURIComponent(frm.elements[i].value)+"&";             }else{             dadosUsuario += frm.elements[i].name+"=" +             encodeURIComponent(frm.elements[i].value);                      }       }    }     var contador = 0; function inserirLinha() {    var linha=document.getElementById('tabelaitem').insertRow(1);    var celula=linha.insertCell(0);    linha.cells[linha.cells.length-1].innerHTML="<select name='categoria' id='categorias' onchange='Javascript:requisicaoHTTP('GET','query_marcas.php?id=' + this.value + '&',true,trataMarca);'><option></option><option value='1'>Carros</option><option value='2'>Motos</option></select";    var celula=linha.insertCell(1);    linha.cells[linha.cells.length-1].innerHTML="<select id='marca' name='marca' onchange='Javacript:requisicaoHTTP('GET','query_modelo.php?cat=' + document.filtro.categorias.value + '&id=' + this.value,true,trataModelo);'></select>";     var celula=linha.insertCell(2);     linha.cells[linha.cells.length-1].innerHTML="<select name='modelo' id='modelo'></select>";     var celula=linha.insertCell(3);     linha.cells[linha.cells.length-1].innerHTML="<select name='valor'><option value='5000'>R$ 5.000,00</option><option value='10000'>R$ 10.000,00</option></select>";     var celula=linha.insertCell(4);     linha.cells[linha.cells.length-1].innerHTML="<select name='valor_ate'><option value='5000'>R$ 5.000,00</option><option value='10000'>R$ 10.000,00</option></select>";     var celula=linha.insertCell(5);     linha.cells[linha.cells.length-1].innerHTML="<select name='ano'><option selected='selected' value=''></option></select>";             contador += 1; } </script> <!-- aqui começa o body --> <input type="button" onClick="inserirLinha()" value="Inserir Item"> <table width="100%" border="1" id="tabelaitem">   <tr>     <td width="108" scope="col" id="col1">Categoria</td>     <td width="165" scope="col">Marca</td>     <td width="198" scope="col">Modelo</td>     <td width="131" scope="col">Pre&ccedil;o de</td>     <td width="142" scope="col">Pre&ccedil;o at&eacute;</td>     <td width="133" scope="col">Ano de</td>     <td width="96" scope="col">Ano at&eacute;</td>   </tr>  </table>

o arquivo query_marcas.php está assim:

    <?php     include "conexao/conexao_mysql.inc";     $categoria = addslashes($_GET["id"]); // pegamos o id passado pelo select     if ($categoria == 1){     $consulta = mysql_query("SELECT * FROM  categorias_carro GROUP BY marca ASC") or die(mysql_error()); // selecionamos todas as subcategorias que pertencem à categoria selecionada     while( $row = mysql_fetch_array($consulta) )     {       echo utf8_encode($row["marca"]) . "|" . $row["codigo"] . ","; // apresentamos cada subcategoria dessa forma "NOME|CODIGO,NOME|CODIGO,NOME|CODIGO,...", exatamente da maneira que iremos tratar no JavaScript     }     }     ?>

Alguem tem uma luz??

Obrigado galera,
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 10:23

Esse + '&' seria o que?

A função, é chamda por outro método, tipo, botão?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 10:48

Opa !!

Essa letra é um e comercial (&).

Exatamtente, a função inserirlinha() é chamada atraves de um botão com função onclick.

Dentro dessa função inserirlinha() é chamada outra função chamada requisicaoHTTP('GET','query_marcas.php?id=' + this.value + '&',true,trataMarca), ao ser tratada, o arquivo query_marcas.php retorna a resposta com os dados do BD...
0
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 10:55

Peguei como base do carregamento dos select's esse script: http://www.codigosnaweb.com/forum/viewt ... 583&p=8215

e como base para criar as linhas com os campos peguei outreo script qu não estou achando agora..
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 11:37

Eu testei o script do link citado, e fiz algumas alterações, que está lá no link mesmo, você chegou a fazer? Porque foi o que fiz para rodar aquele script Ok.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 11:57

Sim fiz todas as alterações e funcionou 100%, um select determina o proximo automaticamente, e é ai que está, quero utilizar essa idéia de pegar select's dinamicos para fazer com que apartir de um clique num botão "Adicionar Item" esses campos sejam criados dentro de cada linha de uma tabela entendeu??

Na realidade é um formulário de pedido de produtos, onde a pessoa ao clicar em "Adicionar Item" cria uma linha para escolher o que vai pedir...depois terá um botão fechar pedido, e então essas seleções que ela fez irá cair para um banco de dados....será que é muito complexo cara ??? to viajando ?? Comecei a praticar AJAX praticamente desde ontem, to vendo que não vou conseguir entregar o projeto conforme o prazo determinado pelo meu cliente!!! Cara, se tiver uma outra idéia me diga, por favor!!

Valeu, abraço..
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 12:44

Posta um print ai que acho que ajudar.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 14:20

O que fica melhor o print do codigo completo ? ou da tela do formulário ??

Abraço
Obrigado
0
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 14:35

arquivo pedido.php

<html> <head> <title>Pedidos</title> <script src="funcoes_ajax.js" type="text/javascript"></script> <script src="biblioteca_ajax.js" type="text/javascript"></script> <script type="text/javascript"> function inserirLinha() {     var linha=document.getElementById('tabelaitem').insertRow(1);     var celula=linha.insertCell(0);     linha.cells[linha.cells.length-1].innerHTML="<select name='categoria' id='categorias' onchange='Javacript:requisicaoHTTP('GET','query_produto.php?cat=1',true,trataProduto);'><option selected='selected' value=''>Selecione</option><option value='1'>Bovina</option><option value='2'>Suina</option><option value='3'>Avina</option><option value='4'>Ovina</option></select>";     var celula=linha.insertCell(1);     linha.cells[linha.cells.length-1].innerHTML="<select id='produto' name='produto'  onchange='Javacript:requisicaoHTTP('GET','query_tipo.php?idprod=1',true,trataTipo);'></select>";     var celula=linha.insertCell(2);     linha.cells[linha.cells.length-1].innerHTML="<select name='tipo' id='tipo'></select>"; } </head> <body> <input type="button" onClick="inserirLinha()" value="Inserir Item">   <table id="tabelaitem" width="100%" border="1" >     <tr>       <td width="10%" scope="col">Categoria</td>       <td width="21%" scope="col">Produto</td>       <td width="23%" scope="col">Tipo</td>       <td width="10%" scope="col">Un</td>       <td width="9%" scope="col">Qtd</td>       <td width="12%" scope="col">Embalagem</td>       <td width="15%" scope="col">Fun&ccedil;&atilde;o</td>     </tr>     <!-- Aqui entra a linha como os SELECT'S -->   </table> </body> </html>

funcoes_ajax.js

// JavaScript Document     function trataProduto()     {       subcat = document.forms[0].produto;       subcat.options.length = 0;       subcat.options[0] = new Option( "Carregando..", "selecione" );       if (ajax.readyState == 4) {         subcat.options.length = 0;         results = ajax.responseText.split(",");         subcat.options[0] = new Option( "Selecione", "selecione" );        for( i = 0 ; i < results.length; i++)         {           string = results[i].split( "|" );           subcat.options[1+i] = new Option( string[0], string[1] );                      }       }     }                 function trataTipo()     {       subcat = document.forms[0].tipo;       subcat.options.length = 0;       subcat.options[0] = new Option( "Carregando..", "selecione" );       if (ajax.readyState == 4) {         subcat.options.length = 0;         results = ajax.responseText.split(",");         subcat.options[0] = new Option( "Selecione", "selecione" );        for( i = 0 ; i < results.length; i++)         {           string = results[i].split( "|" );           subcat.options[1+i] = new Option( string[0], string[1] );                      }       }     }

biblioteca_ajax.js

    // JavaScript Document     var ajax;     var dadosUsuario;       function requisicaoHTTP(tipo,url,assinc,trata)     {        if(window.XMLHttpRequest){        ajax = new XMLHttpRequest();        }        else if(window.ActiveXObject){        ajax = new ActiveXObject("Msxml2.XMLHTTP");                if(!ajax){           ajax = new ActiveXObject("Microsoft.XMLHTTP");           }        }         if (ajax)       iniciaRequisicao(tipo,url,assinc,trata);     else     alert("Seu navegador não possui suporte a essa aplicação");     }       function iniciaRequisicao(tipo,url,bool,trata){           ajax.onreadystatechange=trata;           ajax.open(tipo,url,bool,trata);           ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=UTF-8");           //ajax.overrideMimeType("text/XML");           ajax.send(dadosUsuario);     }       function enviaDados(url){     criaQueryString();     requisicaoHTTP("POST",url,true);     }       function criaQueryString(){        dadosUsuario="";        var frm = document.forms[0];        var numElementos = frm.elements.length;        for(var i=0; i < numElementos; i++){           if(i < numElementos-1){              dadosUsuario += frm.elements[i].name+"=" +              encodeURIComponent(frm.elements[i].value)+"&";              }else{              dadosUsuario += frm.elements[i].name+"=" +              encodeURIComponent(frm.elements[i].value);                         }        }     }

query_produto.php

    <?php     include "../../Connections/connNutricarnes.php";     $categoria = addslashes($_GET["cat"]);     //$subcategoria = addslashes($_GET["id"]); // pegamos o id passado pelo select     if ($categoria == 1){     $consulta = mysql_query("SELECT * FROM  produtos WHERE prod_id_categoria = $categoria GROUP BY prod_nome ASC") or die(mysql_error()); // selecionamos todas as subcategorias que pertencem à categoria selecionada     while( $row = mysql_fetch_array($consulta) )     {       echo utf8_encode($row["prod_nome"]) . "|" . $row["prod_id"] . ","; // apresentamos cada subcategoria dessa forma "NOME|CODIGO,NOME|CODIGO,NOME|CODIGO,...", exatamente da maneira que iremos tratar no JavaScript     }     }     ?>

query_tipo.php

    <?php     include "../../Connections/connNutricarnes.php";     $categoria = addslashes($_GET["idprod"]);     //$subcategoria = addslashes($_GET["id"]); // pegamos o id passado pelo select         $consulta = mysql_query("SELECT * FROM prod_tipo WHERE tipo_id_prod = $categoria GROUP BY tipo_nome ASC") or die(mysql_error()); // selecionamos todas as subcategorias que pertencem à categoria selecionada     while( $row = mysql_fetch_array($consulta) )     {       echo utf8_encode($row["tipo_nome"]) . "|" . $row["tipo_id"] . ","; // apresentamos cada subcategoria dessa forma "NOME|CODIGO,NOME|CODIGO,NOME|CODIGO,...", exatamente da maneira que iremos tratar no JavaScript     }       ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 15:19

O código no caso não adianta, tendo em vista que você tem includes, ... posta um print e tenta explicar melhor o problema.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 17:36

Então, coloquei o print em anexo, os SELECT's que estão ali criados categoria, produto, tipo.. são adicionados qdo clico em adicionar item, pois bem, ao clicar na primeira SELECT e escolher a opção número 1 - Bovinos, a segunda select deveria ser carregada, com tipo de produtos bovinos.

Minha dúvida está nessa linha:

Script que está dentro de pedido.php que Adiciona Combos de produtos na tabela de pedidos:

linha.cells[linha.cells.length-1].innerHTML="<select name='categoria' id='categorias' onchange='Javacript:requisicaoHTTP('GET','query_produto.php?cat=1',true,trataProduto);'><option selected='selected' value=''>Selecione</option><option value='1'>Bovina</option><option value='2'>Suina</option><option value='3'>Avina</option><option value='4'>Ovina</option></select>";

ela é a linha que cria a primeira combo (SELECT), e que deveria já carregar a segunda combo, mas não carrega.

Podemos conversar por MSN ?
Abraço..obrigado até o momento!

ALTERADO: Imagens devem ser colocadas em um servidor e mostradas o link delas ou usada a tag Img, se o tamanho da imagem não comprometer a estrutura do post.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 17:49

Blz, enviei os dados de contato via MP
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 19:33

Perai, se eu estiver certo, o problema está em como o innerHTML está recebendo a linha que chama a função da combo, o que tem de errado nessa linha:

linha.cells[linha.cells.length-1].innerHTML="<select name='categoria' id='categorias' onchange='requisicaoHTTP('GET','query_marcas.php?id=' + this.value + '&',true,trataMarca);'><option></option><option value='1'>Carros</option><option value='2'>Motos</option></select>";

e nessa:

......inner.HTML = "<a href='javascript: abre('documento.php','GET','conteudo')';>abre</a>";

Não to sabendo aonde vão as ' ou então as " ...

obrigado!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17523
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 19:42

A base é a seguinte:

Se você abre e fecha o innerHTML com ", dentro fica ', sendo que no caso você está passando valores internos, então o correto fica

.....inner.HTML = "<a href=\"javascript: abre('documento.php','GET','conteudo')\";>abre</a>";

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 17

Requisição de AJAX para BD dentro de uma função JS

19-06-2009 20:14

Funcionouuuu maravilhosamente bem!!!

no caso da primeira linha que havia perguntado, consertando ela fica assim:

linha.cells[linha.cells.length-1].innerHTML="<select name=\"categoria\" id=\"categorias\" onchange=\"Javacript:requisicaoHTTP('GET','query_produto.php?cat=' + this.value + '&',true,trataProduto)\";><option selected=\"selected\" value=\"\">Selecione</option><option value=\"1\">Bovina</option><option value=\"2\">Suina</option><option value=\"3\">Avina</option><option value=\"4\">Ovina</option></select>";

ai foi só consertar o resto da função inteira que não tinha o \" que uma combo chama a outra, tudo certo!!!

Se alguem tiver interesse no script completo, é só solicitar que criarei um tópico com o script completo funcionando !!!

Obrigado a todos!
0

Quem está online

Usuários navegando neste fórum: Bing [Bot]