Ir para conteúdo

Arquivado

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

ment0r

[Resolvido] Combobox cidade que popula combo bairro

Recommended Posts

E agora, como eu faço a passagem do paramentro dinamicamente?

o script já faz isso aqui nesse trecho:

var idCombo1 = $(this).val();//pegando o value do option selecionado  

 

leia:

http://wbruno.com.br/blog/2011/03/31/como-debugar-javascript-firefox-erros-comuns/

http://wbruno.com.br/blog/2011/04/14/como-debugar-ajax-firebug/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei o function.inc.php para isso:

<?php  
include "../estaticos/conexao.php";
$sql = "select id, nome, cidade from aprimorar.bairro where cidade = ".$_GET['idCombo1'];

$q = pg_query($conexao, $sql);
$total = pg_num_rows($q);
if($total > 0)  {  
while($array = pg_fetch_array($q))  {  
	$json[] = Array('id'=> $array["id"], 'nome'=> utf8_decode($array["nome"]), 'cidade'=> $array["cidade"]); 
}  
}else{  
$json[] = Array('nome'=> utf8_encode( 'nao encontrado' ), 'id'=> '0' ); 
}	
return json_encode( $json );  
?>

 

O problema é que não chega o id da cidade por parâmetro, por isso o select não traz dados... Só falta isso pra resolver o problema.

 

Se alguém tiver alguma ideia eu agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai o seu problema é exclusivamente php.

 

esse return não faz sentido ai, pois você não tem nenhuma function.

e você não está recebendo nenhum $_GET.

Compartilhar este post


Link para o post
Compartilhar em outros sites

W.Bruno já li e salvei seus dois artigos, muito bem explicado - Parabéns!

 

Fiz um teste, coloquei functionn.inc.php (com um n a mais), só pra me familiarizar com o Firebug e apareceu:

 

GET functionn.inc.php?idCombo1=1 404 Not Found... Obvio, uma vez que o nome do arquivo é function.inc.php.

 

Mas o que me "surpreendeu" foi a passagem da variavél idCombo1=1, ou seja, ela está sendo passada. Só não estou conseguindo "pega-la" no function.inc.php

 

Seria essa a função que pega o variavél que vem por parâmetro, não é?

 

function intGet( $campo ){  
  return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;  
}

Não entendi a relação dela com a debaixo:

 

function retorno( $id )  
{...}

A primeira usa $campo e a debaixo $id.

 

Poderia me explicar isso por gentileza? E desde já muito obrigado.

 

Uma outra coisa, sei que no google existem milhares, mas você teria alguma sugestão de leitura sobre javascript? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a relação entre os 2, é o

echo retorno( intGet('idCombo1') ); 

 

ou seja, a chamada da função retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno agora está funcionando só que somente no Firefox (7.0.1). Só que acontece o seguinte: quando eu clico na cidade, aparecem os bairros no outro select, até ai tudo bem, mas quando eu clico no select (combobox) do bairro, pressiona o select da cidade. Veja na imagem

 

34ns67a.jpg

 

Ai eu abusando de sua boa vontade pergunto:

 

1-) Por que só funciona do Firefox?

2-) Por que quando clico no select do bairro pressiona automaticamente o select da cidade. Fica difícil de escolher o bairro desta forma.

 

Muitissimo obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1-) Por que só funciona do Firefox?

preciso ver o teu código, pq o meu é crossbrowser, e funciona no ie+, chrome, safari, opera...

 

 

 

2-) Por que quando clico no select do bairro pressiona automaticamente o select da cidade. Fica difícil de escolher o bairro desta forma.

Provavelmente tem um erro no teu HTML. Se eu puder chutar, diria que você englobou os 2 selects com o mesmo <label>

 

porém, só vendo a sua implementação para eu te dizer oque você errou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acertou na mosca, era um label aberto e não estava fechado. Já foi arrumado. Agora em questão ao não funcionamento no IE, você disse que precisa ver o códido então vou posta-lo.

 

index.php

 

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>  
<script type="text/javascript">  
$(document).ready(function(){//inicio o jQuery  
$("select[name='cidade']").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('bairro');//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='bairro']").append( option[i] );//jogando um à um os options no próximo combo  
		});  
	});  
});  
});   
</script>

 

function.inc.php

<?php  
header("Content-Type: text/html; charset=UTF8");  

function intGet( $campo ){
return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;  
}  
function retorno( $id )  
{
include "../estaticos/conexao.php";

$sql = "select id, nome, cidade from aprimorar.bairro where cidade = ".$id."";

$q = pg_query($conexao, $sql);

$total = pg_num_rows($q);

$json = Array();  
if( $total > 0 )  
{  
	while($array = pg_fetch_array($q))  
	{  
		$json[] = Array('id'=> $array["id"], 'nome'=> utf8_decode($array["nome"]), 'cidade'=> $array["cidade"]);
	}  
}  
else  
	$json[] = Array('id'=> utf8_encode( 'nao encontrado' ), 'id'=> '0' );  

return json_encode( $json );  
}  

echo retorno( intGet('idCombo1') ); 

 

São os dois arquivos. Já usei a ferramenta para desenvolvedores, mas não apresenta erro. Ficarei MUUUITO grato se conseguir me ajudar a resolver esse problema. Só falta isso pra eu terminar o sistema...

 

Desde já meus sinceros agradecimentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

descomentando este alert:

                        function(data){  
                       alert(data);//apenas para debugar a variável  

oq aparece no ie ?

 

 

Aparece algum erro no Ctrl+Shift+J do Firefox ?

 

 

 

tem umas diferenças no parser de jSON do jQuery novo, tentou atualizar a versão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente muito obrigado pela atenção.

 

Descomentei alert(data) e no IE aparece nada, no Firefox aparece [object Object].

 

No console de erros do Firefox apareceu a seguinte mensagem:

 

Alerta: A propriedade specified de objetos Attr não deve mais ser usada. Sempre retorna true.
Arquivo-fonte: http://localhost/teste/index.php
Linha: 0

Não tentei atualizar, seria atualizado para versão 1.6.4 ou 1.7?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser para a última versão mesmo.

 

envie um header de utf8 com o php, no arquivo function.inc.php

 

 

deve voltar Object no ie tb, ai irá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto já atualizei para jquery-1.7.min.js. Quando você diz "envie um header de utf8 com o php, no arquivo function.inc.php" seria isso:

 

function.inc.php

<?php  
header("Content-Type: text/html; charset=UTF8");
...
?>

se for isso, já tem. Agora (desculpe minha ignorância) se não for, como é que eu faço.

 

Muito obrigado mais uma vez pela ajuda William Bruno, sinceramente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, na verdade era isso mesmo que eu estava falando.

 

todos os arquivos estão salvos em UTF8 SEM BOM ?

 

 

vai ser necessário agora, recomeçar todo o processo de debug.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eles estão salvos com BOM se eu não me engano, por quê?

 

Cara, esse esqueminha que eu to tentando usar é sempre tão dificil assim de fazer funcionar? Parece ser uma coisa tão comum nos sites. Já usei "Ferramentas para desenvolvedores" do IE e não apresenta erros. E o pior que funciona perfeitamente no Firefox.

 

To com o sistema pronto, mas queria usar isso, fica melhor, mais profissional. To tendo que fazer uma gambiarra assim:

 

Cidade

-------

Santos

Limeira

 

Bairro

-------

Jd. Paz (Limeira)

Centro (Limeira)

Centro (Santos)

 

Fica feio e muito dificil de achar os bairros quando tiver vários cadastrados. Agradeço toda ajuda, mas se tiver um outro jeito de fazer e puder me passar eu ficarei muito grato.

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

salve todos os arquivos em UTF8 sem BOM.

 

Na verdade, depois q você entende como se faz, fica simples.

 

 

Poste um link para o seu site, ai poderemos avaliar melhor oq acontece com a tua página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

notei uma coisa estranha aqui na requisição, a resposta está voltando assim:

 

 

[{"id":"1","nome":"Tucura                                                                                                                          ","cidade":"1"},{"id":"2","nome":"Centro                                                                                                                          ","cidade":"1"}]

 

com esse monte de espaços ai.. seguinte:

$json[] = Array('id'=> trim( $array["id"] ), 'nome'=> utf8_decode( trim( $array["nome"] ) ), 'cidade'=> trim( $array["cidade"] ) );

 

aplicando esse trim() em cada um dos valores.

Atualize o script online, e volte para informar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigando William Bruno mais uma vez pela ajuda.

 

Já acrescentei o trim(). Notei o seguinte, quando abro o mesmo link nos dois navegadores, veja o que aparece:

 

IE

http://www.imobiliariaaprimorar.com.br/function.inc.php?idCombo=1

[{"id":"0"}]

 

Firefox

http://www.imobiliariaaprimorar.com.br/function.inc.php?idCombo=1

[{"id":"1","nome":"Tucura","cidade":"1"},{"id":"2","nome":"Centro","cidade":"1"}]

 

Isso não mostra que de alguma forma o IE não esta recebendo o idCombo1?

 

Obrigado denovo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o link correto para você testar é este:

 

 

http://www.imobiliariaaprimorar.com.br/function.inc.php?idCombo1=2

pois o parametro se chama idCombo1

 

note que php roda no servidor, então não existe diferença entre browsers.

Acesse o link q postei com o ie e o teu ff, para você ver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem razão, foi uma falta de atenção minha, eu ignorei o 1 do idCombo1.

 

Mas em relação ao não funcionamento do IE, mesmo estando no servidor, você conseguiu identificar algo? Por que será que funciona certinho FF e não no IE?

 

Obrigado.

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.