Mostrando postagens com marcador AJAX. Mostrar todas as postagens
Mostrando postagens com marcador AJAX. Mostrar todas as postagens

sexta-feira, 1 de abril de 2016

Consulta de CEP com JQuery/Ajax e PHP

Olá, hoje irei mostrar como implementar a busca de endereço pelo CEP. Esta prática está sendo a cada dia mais utilizada nos cadastros de clientes nas plataformas web.

Para quesito de organização, resolvi separar o meu código em 3 partes, são elas:

 1º - Html (View)
 2º - JQuery (Model)
 3º - PHP (Controller)

"Quase" um conceito de MVC....rsrs

Para o bom funcionamento deste recurso iremos utilizar o web service República Virtual que disponibiliza o banco de dados de endereços...

Então, mãos na massa. Vamos começar com o nosso Html, para isso precisaremos de um campo para entrar com o CEP e os demais campos que receberão o endereço encontrado:

index.html
   CEP: <input type="number" maxlength="8" class="form-control" name="cep" id="cep" required="" onkeyup="BuscaCep(this.value)"><br>  
   Logradouro: <input disabled="" type="text" class="form-control" name="logradouro" id="logradouro" required=""><br>  
   Nº: <input type="text" class="form-control" id="numero" name="numero" required=""><br>  
   Bairro: <input type="text" disabled="" class="form-control" name="bairro" id="bairro" required=""><br>  
   Cidade: <input disabled="" type="text" class="form-control" name="cidade" id="cidade" required=""><br>  
   UF: <input type="text" class="form-control" id="uf" name="uf" required="" disabled=""><br>  

O nosso arquivo html acima possui apenas os campos que receberão os dados, mas para isso existe a função BuscaCep que está sendo chamada pelo "onkeyup" do campo CEP.

Observe que os outros campos (exceto "numero") encontram-se com a propriedade disabled, isto porque na nossa função tratamos para que o usuário só precise entrar com o seu endereço se o seu cep não for localizado.

Vamos ver como é feita a execução desta função em nosso arquivo JS:

funcoes.js
 function BuscaCep(cep) {  
   if (cep.length >= 8) {  
     $.ajax({  
       url: 'cep.php', /* URL que será chamada */  
       type: 'POST', /* Tipo da requisição */  
       data: 'cep=' + $('#cep').val(), /* dado que será enviado via POST */  
       dataType: 'json', /* Tipo de transmissão */  
       success: function (data) {  
         if (data.sucesso === '1') {  
           $('#logradouro').val(data.rua);  
           $('#bairro').val(data.bairro);  
           $('#cidade').val(data.cidade);  
           $('#uf').val(data.estado);  
           $('#numero').focus();  
           alertas('limpar', '', 'msg')  
           $('#logradouro').prop("disabled", false);  
           $('#bairro').prop("disabled", false);  
           $('#cidade').prop("disabled", false);  
           $('#uf').prop("disabled", false);  
         } else {  
           $('#logradouro').prop("disabled", false);  
           $('#bairro').prop("disabled", false);  
           $('#cidade').prop("disabled", false);  
           $('#uf').prop("disabled", false);  
           alert('Seu CEP não foi localizado, digite seu endereço!');  
         }  
       }  
     });  
   }  
   return false;  
 }  

O nosso aquivo acima verifica a quantidade de caracteres digitado no campo cep, se for maior/igual a 8 (quantidade atual de números no cep), o AJAX é acionado. Assim passando o valor digitado no método POST para o nosso arquivo PHP.

Além disso com o retorno enviado do nosso arquivo php, preenchemos os valores nos devidos campos html, e se por algum motivo o cep não for localizado, habilitamos os campos para que o usuário o informe manualmente.

Vamos ver agora o nosso php, que executará a consulta no web service.

cep.php
 <?php  
   $cep = $_POST['cep'];  
   $reg = simplexml_load_file("http://cep.republicavirtual.com.br/web_cep.php?formato=xml&cep=" . $cep);  
   $dados['sucesso'] = (string) $reg->resultado;  
   $dados['rua']   = (string) $reg->tipo_logradouro . ' ' . $reg->logradouro;  
   $dados['bairro'] = (string) $reg->bairro;  
   $dados['cidade'] = (string) $reg->cidade;  
   $dados['estado'] = (string) $reg->uf;  
   echo json_encode($dados);  
 ?>  


Então, o nosso php recebe o valor cep via post (digitado no nosso html e enviado pelo nosso Js), passamos o valor para o web service utilizado (República Virtual) e em seguida preenchemos as nossas variáveis e retornamos um Json para a nossa função JS que fará o restante do trabalho...


É isso pessoal, espero que gostem e que consigam implementar esta prática nos seus projetos...