Ir para conteúdo

POWERED BY:

Arquivado

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

ment0r

Problema com exibição dinâmica com Ajax

Recommended Posts

Boa noite a todos.

Estou com dois problemas que depois de tudo, julgo ser obra de alguma entidade... Vamos lá...

 

Tenho um site de anúncios de imóveis no qual há uma busca, desse modo:

 

28ivj1g.jpg

 

Quando eu escolho uma cidade, automaticamente o campo bairro mostra seus respectivos bairros, através de uma arquivos getBairro.js

$(document).ready(function(){
   $("#finalidade").change(function(){
      $.ajax({
         type: "POST",
         url: "includes/getValor.php",
         data: {finalidade: $("#finalidade").val()},
         dataType: "json",
         success: function(json){
            var options = "";
            $.each(json, function(key, value){
               options += '<option value="' + key + '">' + value + '</option>';
            });
            $("#valor").html(options);
         }
      });
   });
});

Esse arquivo fazia uma chamada para o getValor.php:

<?php
header('Content-type: text/json');
include "../includes/conexao.php";
header('Content-type: text/html; charset=utf-8');

$select_bairro = "select * from pim.bairro where cidade = ".$_POST['cidade']." order by nome";
$query_bairro  = pg_query($conexao, $select_bairro);

$retorno = array();

while($array_bairro = pg_fetch_array($query_bairro))
{
	$retorno[trim($array_bairro["id"])] = trim(utf8_decode($array_bairro["nome"]));
}

echo json_encode($retorno);
?>

Tudo muito simples e funcionava perfeitamente até o dia em que um cliente me pediu pra adicionar um novo bairro, eu inseri e o mesmo ficou em último lugar, o que não era pra acontecer pois tenho um order by nome no select.

 

Um outro cliente pediu pra cadastrar mais 5 bairros e depois que fiz isso não funcionou mais. Agora quando eu escolho uma cidade, nada acontece!!! Só que tem algo curioso: numa página de cadastro tenho o mesmo recurso usado na busca, só que nessa o cliente faz a escolha pra cadastrar um imóvel e acreditem, lá funciona, fora de ordem, mas funciona (Localhost também funciona normalmente).

 

2-) E o outro problema é: por que os bairros ficam fora de ordem sendo que há a cláusula order by?

 

Não sei o que pode ser, já fiz upload das páginas citadas acima e nada acontece e o pior é que o site já está online, ou seja, os usuários já estão usando-o.

 

Peço encarecidamente a ajuda de vocês, qualquer ideia ajuda, qualquer sugestão é bem vinda.

 

Muito obrigado desde já e uma boa noite a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Tem alguns erros.. esse script foi modificado pela sua entidade do além..

Veja:

data: {finalidade: $("#finalidade").val()},
então você envia um $_POST['finalidade'], mas lá no PHP você tenta receber com outro nome:

cidade = ".$_POST['cidade']." order by nome";
como cidade, e não como finalidade.

Além disso, o arquivo que você chama é o: url: "includes/getValor.php", e não getBairro.php. Está certo até ai ?

Ou você postou o arquivo js errado ? (de outra parte do projeto?)

 

2. O banco possui um "order by" default dele.

Se você quer em uma ordem específica, declare especificamente o order que você quer.

Quer em ordem alfabética ? quer em ordem em que foi cadastrado ? declare o teu ORDER BY.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno, primeiramente muito obrigado pela ajuda.

 

 

então você envia um $_POST['finalidade'], mas lá no PHP você tenta receber com outro nome:
cidade = ".$_POST['cidade']." order by nome";

 

Aqui houve um erro de minha parte na descrição do tópico, eu colei um trecho errado. Na verdade é esse:

$(document).ready(function(){
   $("#cidade").change(function(){
      $.ajax({
         type: "POST",
         url: "includes/getBairro.php",
         data: {cidade: $("#cidade").val()},
         dataType: "json",
         success: function(json){
            var options = "";
			options += '<option value="">Todos</option>';
            $.each(json, function(key, value){
               options += '<option value="' + key + '">' + value + '</option>';
            });
            $("#bairro").html(options);
         }
      });
   });
});

É que eu também tenho um arquivo getValor.js, usado em outra situação. Só colei o código errado, peço desculpa.

 

Em relação a sua segunda resposta, veja só: no arquivo getBairro.php o select que busca os bairros já estão com o order by:

$select_bairro = "select * from pim.bairro where cidade = ".$_POST['cidade']." order by nome";

Se eu der um echo na variável $select_bairro e colar o trecho numa prompt do SGDB ordena certinho (por ordem alfabética). Se eu der um print no array trim(utf8_decode($array_bairro["nome"])), tbm deixa por ordem alfabética. Só nos <selects> que os últimos bairros cadastrados ficam por último.

 

O que você acha que é? Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não é possível. Tem como postar um link para vermos online o erros acontecendo ?

Qual outro problema além da ordenação vc tem ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O primeiro problema foi resolvido (não aparecer os bairros quando eu escolhia uma cidade): Fiz um teste em outro computador e apareceu, ai limpei os temporários dos navegadores no meu note e voltou a aparecer. O problema era local.

 

Bom, o problema que estou tendo agora é o fato de que os novos bairros cadastrados ficam em último, ou seja, fora de ordem alfabética, mas só os novos bairros.

 

Você pode ver o problema aqui, está no canto superior esquerdo "Buscar imóveis".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tem erro no teu php.

Poste aqui o script php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente obrigado William Bruno.

Então cara, o código que contém o ajax/jquery é o getBairro.js e a busca é feita pelo arquivo getBairro.php (ambos postados acima). O arquivo que contém o formulário de busca na página inicial só tem o id do <select>.

Aconteceu um dia de "sumir" todos os bairros, como eu disse na descrição do tópico; e então eu limpei os arquivos temporários e resolveu. O que eu quero dizer com isso é: será que não tem um modo de "limpar os temporários" no servidor (nem sei se existe isso, é só uma idéia).

Isso é um problema bem estranho, aparentemente está tudo Ok. Eu coloquei "order by nome" no select. E outra, os outros estão ordenados, só os novos que não. Faz tempo que estou com esse problema viu...

 

Bom, qualquer ajuda é bem vinda. Fico no aguardo ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não existem temporários no servidor.

O seu problema era cache no browser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu imaginei (não entendo de servidores o suficiente) que não existiria temporários em servidores. Mas então o que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma de você evitar esses temporários, é enviar uma hash ou timestamp no nome dos arquivos estáticos css e js:

 

main.css?t=12313123
e:

all.js?t=12313123
entendeu ?

esse ?t=12313123 vai obrigar que o navegador baixe o arquivo de novo, cada vez que você alterar um número, e então resolver o teu problema de cache.

 

Sobre os outros erros, que bom que resolveu. Era só isso mesmo.

Você tinha uma impressão de que funcionava, mas estava errado. Agora está correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno, fiz um teste (localhost) assim:

$select_bairro = "select * from pim.bairro where cidade = ".$_POST['cidade']." order by id DESC";

Mudei o order by de nome para id e usei o DESC para ver se ordenava decrescentemente a lista e não ordenou, ficou igual estava (em ordem alfabética e com os 4 últimos registros fora da ordem). Só que se eu colar esse trecho SGDB ele ordena corretamente, obviamente. Limpei o cache do browser e nada... Lembrando que estou fazendo localmente pra só dps de tudo certo carregar para o servidor.

O getBairro.js faz a chamada pro getBairro.php que faz a busca, no entanto os últimos bairros cadastrados não entram em ordem. Isso que ta me deixando P da vida, pq os arquivos estão sendo carregados.

 

Será que o retorno dessa busca, não fica armazenada, salva ou sei lá, em algum lugar? Tentei usar o unset() antes de instanciar um array nela, mas tbm não resolveu.

 

Usei o firebug, mudei a cidade e no console do mesmo os registros são exibidos conforme o select acima, não da pra entender o porque de não aparecer no <select> corretamente.

 

Cara... to tentando de tudo... não vai. <_<

 

Tem algum bom tutorial sobre hash/timestamp?

 

Desde já, muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara.. deixa ORDER BY nome não faz nenhum sentido você order por id.

 

Não, não fica. Você que não está entendendo a sua tabela. Olhe melhor para o sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, pode ficar tranquilo, eu entendo sim minha tabela :thumbsup: .

 

Eu só mudei o order by de nome pra id, conforme eu disse acima, para ver se mudava no <select> a ordem da exibição dos bairros, mas não mudou. Estou tentando de tudo pra chegar na solução desse problema. Ai que está: "mesmo que eu mude o select que busca os bairros, nada acontece na exibição".

 

Isso é problema no arquivo .js será?

Tem algum bom tutorial sobre hash/timestamp?

 

Desde já obrigado pela ajuda.

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.