Ir para conteúdo

Arquivado

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

Orides Tomkiel Zmovirzynsk

Consulta Cep Correio + Ajax

Recommended Posts

Rasp!!Peguei o seu código, mas quando digito um cep q irá retornar somente a cidade e estado, na localidade fica aparecendo "Carregando", era esse o erro q estavas falando antes?testei novamente com o meu código e não acontece isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ISO,No meu esta aparecendo 'carregando' porque eu isolei a parte que você alterou, o problema que eu falei ai em cima e que quando você digita um CEP e depois apaga ele, no input localidade ele resulta "<response><cidade>".Mais caso vocÊ digite o cep e conclua a operação com um cep valido ele funciona normal, creio que ele so nao esta resultando um valor em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que quando o cep está em branco o retorno do "ajax.responseText" é :<response><cidade>Atendimento ao Cliente</cidade></response>daí como eu fazia "r.indexOf('<cidade> ')" achava e mostrava "<response><cidade>"Se ao invés de fazer : if (r.indexOf(' <cidade> ') > 0){ fizer:if (r.indexOf(' - ') > 0){ só vai mostrar a localidade quando encontrar a cidade e o estado, pois eles vem separado por ' - ', daí funcionaÉ só substituir esse IF entaum ou se tiver outra idéia pode ser tbmté mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Galera.. Olha muito bom essa função.. Mas pelo meotivo q eu não sei, ela começou a apresentar um erro que não estava aparecendo antes.quando se escolhe qualquer CEP, está aparecendo a seguinte mensagem em logradouro:<response><cidade>MensagemAté no site de teste que o nosso amigo deixou pra vermos a função funcionando está acontecendo isso.Abraços a todos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá WeReWolF,

 

aqui está o código original sem este problema:

 

form.php

 

<html>  <head>	<title>Busca Cep + Ajax + WebService Correio</title>	<script type="text/javascript">function addEvent(obj, evt, func) {  if (obj.attachEvent) {	return obj.attachEvent(("on"+evt), func);  } else if (obj.addEventListener) {	obj.addEventListener(evt, func, true);	return true;  }  return false;}function XMLHTTPRequest() {  try {	return new XMLHttpRequest(); // FF, Safari, Konqueror, Opera, ...  } catch(ee) {	try {	  return new ActiveXObject("Msxml2.XMLHTTP"); // activeX (IE5.5+/MSXML2+)	} catch(e) {	  try {		return new ActiveXObject("Microsoft.XMLHTTP"); // activeX (IE5+/MSXML1)	  } catch(E) {		return false; // doesn't support	  }	}  }}function buscarEndereco() {var campos = {  validcep: document.getElementById("validcep"),  cep: document.getElementById("cep"),  logradouro: document.getElementById("logradouro"),  numero: document.getElementById("numero"),  bairro: document.getElementById("bairro"),  localidade: document.getElementById("localidade"),  uf: document.getElementById("uf")};var ajax = XMLHTTPRequest();ajax.open("GET", ("./webservice.php?cep=" + campos.cep.value.replace(/[^\d]*/, "")), true);  ajax.onreadystatechange = function() {  if (ajax.readyState == 1) {  campos.logradouro.disabled = true;  campos.logradouro.value = "carregando...";  campos.bairro.disabled = true;  campos.localidade.disabled = true;  campos.bairro.value = "carregando...";  campos.uf.disabled = true;  campos.localidade.value = "carregando...";  } else if (ajax.readyState == 4) {  if(ajax.responseText == false){	campos.validcep.innerHTML = "<strong>Cep invalido !</strong>";	campos.logradouro.disabled = false;	campos.logradouro.value = "";	campos.bairro.disabled = false;	campos.localidade.disabled = false;	campos.bairro.value = "";	campos.uf.disabled = false;	campos.localidade.value = "";  }else{	campos.validcep.innerHTML = "";	var r = ajax.responseText, i, logradouro, numero, bairro, localidade, uf;	logradouro = r.substring(0, (i = r.indexOf(':')));	campos.logradouro.disabled = false;	campos.logradouro.value = unescape(logradouro.replace(/\+/g," "));	r = r.substring(++i);	bairro = r.substring(0, (i = r.indexOf(':')));	campos.bairro.disabled = false;	campos.bairro.value = unescape(bairro.replace(/\+/g," "));	r = r.substring(++i);	localidade = r.substring(0, (i = r.indexOf(':')));	campos.localidade.disabled = false;	campos.localidade.value = unescape(localidade.replace(/\+/g," "));	r = r.substring(++i);	uf = r.substring(0, (i = r.indexOf(';')));	campos.uf.disabled = false;	i = campos.uf.options.length;	while (i--) {	  if (campos.uf.options[i].getAttribute("value") == uf) {	  break;	  }	}	campos.uf.selectedIndex = i;  }  }};ajax.send(null);}window.addEvent(  window,  "load",  function() {window.addEvent(document.getElementById("cep"), "blur", buscarEndereco);});</script><style type"text/css">body {  margin: 0;  padding: 30px 50px;  font: 70% Verdana, Arial, sans-serif;}h1 {font-size: 140%;}form {margin: 30px 50px 0;}form fieldset {  float: left;  padding: 0 20px 10px;  background: #e5e5e5;  border-style: solid;  border-width: 1px 2px 2px 1px;  border-color: #AAA;}form legend {  margin-bottom: 15px;  padding: 5px 10px;  background: #F5F5F5;  border-style: solid;  border-width: 1px 2px 2px 1px;  border-color: #AAA;  font-weight: bold;}form p {  float: left;  clear: both;  margin: 0;}form label {  float: left;  clear: left;  display: block;  width: 90px;  height: 30px;  margin-right: 5px;  padding-top: 3px;  cursor: pointer;  text-align: right;  color: #C00;}form label.numero {clear: none; width: 60px;}form label.uf {clear: none; width: 30px;}form input {float: left; width: 200px;}form input#numero, form input#uf {width: 50px;}form input#bt-submit {width: 100px; margin-left: 150px;}address {clear: both; padding: 30px 0;}	</style>  </head>  <body>	<form action="#" method="post" name="pai">	  <fieldset>		<legend>Informe o Cep</legend>		<p>		  <label for="cep">CEP</label>	  <input type="text" name="cep" id="cep" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />  <div id="validcep" style="color: #FF0000;"></div>		 </p>		<p>		  <label for="logradouro">Logradouro</label>		  <input type="text" name="logradouro" id="logradouro" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />		  <label for="numero" class="numero">Número</label>		  <input type="text" name="numero" id="numero" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />		</p>		<p>		  <label for="complemento">Complemento</label>		  <input type="text" name="complemento" id="complemento" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />		</p>		<p>		  <label for="bairro">Bairro</label>		  <input type="text" name="bairro" id="bairro" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />		</p>		<p>		  <label for="localidade">Localidade</label>		  <input type="text" name="localidade" id="localidade" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />		  <label for="uf" class="uf">UF</label>		  <select id="uf">			<option value="">-- selecione --</option>			<option value="AC">Acre</option>			<option value="AL">Alagoas</option>			<option value="AP">Amapá</option>			<option value="AM">Amazonas</option>			<option value="BA">Bahia</option>			<option value="CE">Ceará</option>			<option value="DF">Distrito Federal</option>			<option value="ES">Espírito Santo</option>			<option value="GO">Goiás</option>			<option value="MA">Maranhão</option>			<option value="MT">Mato Grosso</option>			<option value="MS">Mato Grosso do Sul</option>			<option value="MG">Minas Gerais</option>			<option value="PA">Pará</option>			<option value="PB">Paraíba</option>			<option value="PR">Paraná</option>			<option value="PE">Pernambuco</option>			<option value="PI">Piauí</option>			<option value="RJ">Rio de Janeiro</option>			<option value="RN">Rio Grande do Norte</option>			<option value="RS">Rio Grande do Sul</option>			<option value="RO">Rondônia</option>			<option value="RR">Roraima</option>			<option value="SC">Santa Catarina</option>			<option value="SP">São Paulo</option>			<option value="SE">Sergipe</option>			<option value="TO">Tocantins</option>		  </select>		</p>		<p>		  <input type="submit" id="bt-submit" value="Enviar" />		</p>	  </fieldset>	</form>  </body></html>

Qualquer coisa avisa ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá WeReWolF,aqui está o código original sem este problema:form.phpQualquer coisa avisa ai.

Obrigado pela resposta rápida.. porem ainda estou com o mesmo problema..segue o link q você colocou pra testarmos..http://www.midiaville.com.br/docs/arquivos/forum/form.phptb apresenta o mesmo problemas..Será que essa base está indisponível? caiu ou aconteceu alguma coisa?Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

WeReWolF

Realmente este problema não esta acontecendo só com você... realmente não estamos tendo acesso a base de dados dos correios, creio que deve ser algum problema interno de la, e não do codigo pois após as modificações feitas pelo Orides e ISO o codigo ficou 100%.

Vamos esperar ate segunda... se não funcionar, corremos atrás pra solucionar.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rasp,

 

Vlw ae.. realmente, eu tentei acesso pelo Microsoft Office 2003, que é o q o correio disponibiliza junto a microsoft, e também deu erro de acesso.

 

Obrigado.

 

Bem.. tem um site, que eh em asp, que está funcionando.. mas está em asp.. se num me engano.. de uma olhada:

 

http://www.laroya.com.br/cadastro.asp

 

Abraços a todos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia WeReWolF,Realmente o webservice do correio está indisponivel, mas isto acontece, quando eu fiz o primeiro cliente para o webservice deles, ficou de uma quinta até terça terça fora do ar, uma alternativa é usar uma base própria pois as vezes acontece este problema.Att,Orides Tomkiel Zmovirzynski.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem o link para download dessa base de dados

Você deve adquirir esta base de dados junto aos correios ou buscar de servidores alternativos, caso o webservice do correios não esteja disponível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas isto eh pago???

É!

 

O CD de uso comercial, com atualização anual, dependendo do uso, pode ser bem caro.

 

http://www.correios.com.br/servicos/cep/dne.cfm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Orides,

 

beleza.....

 

Legal sua iniciativa, parabéns http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif/>

então o webservice do correio está indisponivel ? por isso que num funciona o exemplo ....

mas o Orides, o que você acha viável ?

 

usar o webservice do correio ou ter a propria base em nosso servidor ?

 

valew.. abrss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia David,Com certeza eu a opção mais segura é ter a própria base de dados, mas o problema é com a atualização, porque sempre estão surgindo novos ceps e a base vai ficando obsoleta, uma solucao que eu pensei em fazer recentemente, era usar este código que faz a consulta e criar um insert na base de dados com um loop, para ele varrer todos os ceps em uma tabela, mas este procedimento iria demorar muito tempo, pois existem hoje mais de 700mil ceps cadastrados junto aos correios, sei lá, se alguem tiver alguma ideia ou sugestao fica ao o convite para ajudar a implementar um codigo para armazenar a base de dados do correio.Att,Orides Tomkiel Zmovirzynski.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Orides, concordo com sua afirmação...

 

estava pesando, vamos supor q eu tenha um loja virtual, e claro que vou precisar fazer uma consulta de CEP....

caso eu pegue o CEP direto do site do correio, imagina se o site do correio ficar fora do ar.... durantes 2 ou 3 dias (igual está acontecendo com seu exemplo, ele num funciona, mas é por causa do site do correio certo), ai como minha loja vai calcular o frete? como você disse seria legal ter o BD em meu servidor......

 

bom e se nesse caso eu tivesse as 2 coisas :unsure:/>

exemplo:

 

montamos um script para verificar se o webservice do correio está disponivel!!!!! http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif/>

caso o webservice não esteje, ai podemos pegar os CEP`S em nosso próprio servidor

tenteu?

resumindo: Podemos usar o webservice do correio, e tb ter a próprio BD em nosso servidor, para qualquer problema, tipo back up...... bom estava pensando em alguma coisa assim.... <_<

humm será q eu disse besteira.... ainda sou novato com PHP... bom era essa uma idéia q eu tinha..... vamos ver o que o pessoal acha...

 

abrasss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá David, não vou mentir dizendo que não havia pensado nesta possibilidade tambem, mas é mais uma saida para o problema, e é até a mais indicada, quando tiver um tempinho irei implementar esta funcionalidade no sistema, mas agora to atochado de coisas pra fazer no trabalho e em casa estou trabalhando na reestruturacao do meu site pessoal, mas fica aberto o convite para que quiser contribuir com o código.Att, Orides Tomkiel Zmovirzynski.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Orides, não muito conhecimentos com ajax igual a você, mas vou tentar fazer alguma coisa aqui, para testar vou prgar o BD em: http://www.michelazzo.com.br/component/option,com_docman/task,doc_download/gid,70/Itemid,137/

 

mas, como eu vou fazer para calcular o frete ? caso eu use algum desses BD que vou fazer download pela net?

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.