Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa
queria carregar um combobox apartir de outro, mas quando eu clico em um, os dados correspondentes do banco aparecem em um único option no outro que não da nen pra selecionar, alguém pode me ajudar?
acredito que o problema esteja no javascript, por isso estou postando aqi. Por favor me corrija se eu estiver errado.
servico.php
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#rede').blur(function(){
$('#posto').load('validacao.php?campo=rede&valor='+$("#rede").val() );
});
});
</script>
<?php
$pega_rede="SELECT id_pessoa_juridica, razao_social FROM pessoa_juridica where tipo_pessoa='2'";
$resultado = executa_consulta($pega_rede);
echo'<p>';
echo'<select name="rede" id="rede" />';
while ($linha = mysql_fetch_assoc($resultado))
{
$id_rede=$linha['id_pessoa_juridica'];
$razao=$linha['razao_social'];
if($linha==0)
echo"<option value=$id_rede selected='selected'> $razao</option>";
else
echo"<option value=$id_rede > $razao</option>";
}
echo'</select></p><p>';
echo"<select name='posto' id='posto'>
<option value='0'>Selecione uma rede</option>
</select>";
...
validacao.php
$campo = utf8_decode($_GET['campo']);
$valor = utf8_decode($_GET['valor']);
if ($campo=="rede")
{
conecta("xxxxxx");
$consulta_posto = "SELECT P.`id_pessoa_juridica`,P.`razao_social`,P.cidade,P.estado,P.cnpj
FROM pessoa_juridica P
JOIN pj_pj
WHERE P.`tipo_pessoa`= '1234'
AND pj_pj.id_destino='$valor'
AND P.id_pessoa_juridica = pj_pj.id_origem ";
$resultado_posto = executa_consulta($consulta_posto);
while ($linha = mysql_fetch_assoc($resultado_posto))
{
$id_posto=$linha['id_pessoa_juridica'];
$razao=$linha['razao_social'];
echo"<option value=$id_posto>$razao </option>";
}
}tentei usar seu script mas só apareceu o primeiro alert,
script:
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){//inicio o jQuery
$("select[name='rede']").blur(function(){
var idCombo1 = $(this).val();//pegando o value do option selecionado
alert(idCombo1);//apenas para debugar a variável
$.getJSON(//esse método do jQuery, só envia GET
'teste.php',//script server-side que deverá retornar um objeto jSON
{idCombo1: idCombo1},//enviando a variável
function(data){
alert(data);//apenas para debugar a variável
var option = new Array();//resetando a variável
resetaCombo('posto');//resetando o combo
$.each(data, function(i, obj){
option[i] = document.createElement('option');//criando o option
$( option[i] ).attr( {value : obj.id} );//colocando o value no option
$( option[i] ).append( obj.nome );//colocando o 'label'
$("select[name='posto']").append( option[i] );//jogando um à um os options no próximo combo
});
});
});
});
/ função pronta para ser reaproveitada, caso queira adicionar mais combos dependentes /
function resetaCombo( el )
{
$("select[name='"+el+"']").empty();//retira os elementos antigos
var option = document.createElement('option');
$( option ).attr( {value : '0'} );
$( option ).append( 'Escolha' );
$("select[name='"+el+"']").append( option );
}
</script><?php
function intGet( $campo ){
return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;
}
function retorno( $id )
{
$sql = "SELECT P.`id_pessoa_juridica`,P.`razao_social`
FROM pessoa_juridica P
JOIN pj_pj
WHERE P.`tipo_pessoa`= '3'
AND pj_pj.id_destino='$id'
AND P.id_pessoa_juridica = pj_pj.id_origem ";
conecta("sistema"):
$q = executa_consulta( $sql );
$json = ' [';
if( mysql_num_rows( $q ) > 0 )
{
while( $dados = mysql_fetch_assoc( $q ) )
{
$json .= '{"nome'.$campo.'":"'.$dados['razao_social'].'",
"id'.$campo.'":"'.$dados['id_pessoa_juridica'].'"}, ';
}
}
else
$json .= '{"nome'.$campo.'": "Não Encontrado"}';
$json .= ']';
return $json;
}
echo retorno( intGet('idCombo1') );
?>acessa diretamente lá:
localhost/teste.php?idCombo1=2
arrume os erros php, até o json voltar corretamente.
desculpa,mas oque é a variavel $campo?,para que serve?como é passado o parâmetro?
os erros que faltaram é pq ela não ta setada
//$json .= '{"nome'.$campo.'":"'.$dados['nome'].'","id'.$campo.'":"'.$dados['id'].'"}, ';
vlw
pode remover... =X
é que eu tinha uma outra implementação aqui, e acabei esquecendo de simplificar completamente antes de postar.
pode tirar essa variavel..
"id":"'.$dados['id_pessoa_juridica'].'"}, ';
}
}
else
$json .= '{"nome": "Não Encontrado"}';William , eu peguei esse seu codigo , mas nao consigo fazer com que apareça no segundo combobox, verifiquei como você falou para desbugar , e o php , funciona direitinho.
tbm tentei debugar com alerts que tem no codigo , apenas aparece o do valor do combo , o alert da data nao aparece. pode me ajudar ?
sem nenhumas modificações no seu codigo principal.
gremio10, veja meu post em #4
acesse diretamente o arquivo, e veja se aparecem erros php, ou o jSON formatado corretamente.
>
gremio10, veja meu post em #4
acesse diretamente o arquivo, e veja se aparecem erros php, ou o jSON formatado corretamente.
Eu fiz isso , e arrumei todo o erro de php , e ele mostra direitinho os dados do banco , ai qndo ele procura no primeiro combo e acha os estados , e do o change e aparece o alert do valor dele , mas o segundo alert nao aparece
então pode ser que o caminho para o arquivo de ação, esteja errado.
Bom , eu vou colocar aqui os codigos , ok ?
jquery.php
<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){//inicio o jQuery
$("select[name='combo1']").change(function(){
var idCombo1 = $(this).val();//pegando o value do option selecionado
//alert(idCombo1);//apenas para debugar a variável
$.getJSON(//esse método do jQuery, só envia GET
'function.inc.php',//script server-side que deverá retornar um objeto jSON
{idCombo1: idCombo1},//enviando a variável
function(data){
//alert(data);//apenas para debugar a variável
var option = new Array();//resetando a variável
resetaCombo('combo2');//resetando o combo
$.each(data, function(i, obj){
option[i] = document.createElement('option');//criando o option
$( option[i] ).attr( {value : obj.id} );//colocando o value no option
$( option[i] ).append( obj.nome );//colocando o 'label'
$("select[name='combo2']").append( option[i] );//jogando um à um os options no próximo combo
});
});
});
});
/* função pronta para ser reaproveitada, caso queira adicionar mais combos dependentes */
function resetaCombo( el )
{
$("select[name='"+el+"']").empty();//retira os elementos antigos
var option = document.createElement('option');
$( option ).attr( {value : '0'} );
$( option ).append( 'Escolha' );
$("select[name='"+el+"']").append( option );
}
</script>
</head>
<body>
<form action="" method="post">
<fieldset>
<label><select name="combo1">
<option value="0">Escolha</option>
<option value="1">Item 1</option>
<option value="2">Item 2</option>
<option value="3">Item 3</option>
</select></label>
<label><select name="combo2">
<option value="0">Escolha</option>
</select></label>
</fieldset>
<input type="submit" value="Testar">
</form>
</body>
</html>
esse é o function.inc.php
<?php
header("Content-Type: text/html; charset=ISO-8859-1");
function intGet( $campo ){
return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;
}
function retorno( $id )
{
$sql = "SELECT `id`, `nome`
FROM `combo2`
WHERE `idCombo1` = {$id} ";
$sql .= "ORDER BY `nome` ";
$mysqli = new mysqli("localhost", "root", "", "ajax");
//$con = mysql_connect('localhost', 'root', '123');
//mysql_select_db( 'ajax', $con );
$q = $mysqli->query( $sql );
//$q = mysql_query( $sql );
$json = ' [';
if( $q->num_rows > 0 )
//if( mysql_num_rows( $q ) > 0 )
{
while( $dados = $q->fetch_object() )
//while( $dados = mysql_fetch_assoc( $q ) )
{
$json .= '{"nome'.$campo.'":"'.$dados->nome.'","id'.$campo.'":"'.$dados->id.'"}, ';
//$json .= '{"nome'.$campo.'":"'.$dados['nome'].'","id'.$campo.'":"'.$dados['id'].'"}, ';
}
}
else
$json .= '{"nome'.$campo.'": "Não Encontrado"}';
$json .= ']';
return $json;
}
echo retorno( intGet('idCombo1') );
o problema é que no meu trabalho eu consegui fazer funcionar , utilizando o XP , agora na minha casa , usando o 7 , nao funcionou de jeito nenhum , até suspeito que possa ser comflito com OS , mas acho dificil.
Verifique as configurações de instalação do php, do apache e do mysql.
você tem MySQLi habilitado tanto na tua casa como no teu trabalho ?
você ao menos entendeu como o script funciona ?
Não há problemas no script. Apenas remova a variavel $campo
$json .= '{"nome":"'.$dados->nome.'","id":"'.$dados->id.'"}, ';
//$json .= '{"nome":"'.$dados['nome'].'","id":"'.$dados['id'].'"}, ';
}
}
else
$json .= '{"nome": "Não Encontrado"}';
nessas situações, prefira criar um tópico específico para sua dúvida.
Fica mais fácil de organizar e responder.
Ok , criarei um topico , para uma organização.
Consegui fazer funcionar via local , era um erro de aspas , incrivel , mas era , agora estou falando com o servidor , e tentarei configurar meu pc para mysqli , obrigado William
gremio10 você pode mostrar onde estava o erro? eu estou com o mesmo problema, o segundo alert ainda não aparece...
o json ta direitinho
eu estava usando as funcçoes do php_mysql, daí mudei pra php_mysqli e funcionou direitinho
vlw pela ajuda!! :clap:
nossa cara, nunca vi usar o método load() dessa forma.
veja uma maneira melhor de fazer isso:
http://forum.imasters.com.br/index.php?/topic/365795-combos-dependentes-ajax-jquery/