Tag: ajax

  • Como criar um uploader drag & drop, AJAX com porcentagem e Javascript puro?

    Como criar um uploader drag & drop, AJAX com porcentagem e Javascript puro?

    Eu sei, o título é grande, mas trata-se de uma tecnologia muito útil quanto a usabilidade. A ideia é criar, da forma mais simples possível um uploader que mostre a porcentagem do que está sendo enviado, com múltiplos arquivos. Porém, não apenas isso, mas da forma mais pura possível, sem a necessidade de frameworks, bibliotecas de terceiros ou pre-processadores. Em nosso tutorial, usaremos PHP no back-end, mas você pode usar a linguagem que melhor lhe adequar. Abaixo você pode testar um exemplo:

    DISCLAIMER: Para preservar você, o blog e a mim, o upload.php do exemplo não está fazendo upload de verdade, então você não vai ter acesso ao arquivo no final, porém, no link do github está o código funcional.

    Download

    HTML

    Antes de prosseguir, vou alertar que estou usando o font-awesome no exemplo, apenas para não ter que fazer nenhum upload de imagens por hora, mas ele não é obrigado para o que vamos fazer.

    Iniciaremos com um HTML bem simples. Vamos definir apenas a área de upload, da lista e uma área onde ficará o input. Esse input deve ser do tipo file e deve estar com o atributo mutiple definido. Nada muito especial por enquanto, pois nosso trunfo está mais no CSS e Javascript.

    CSS3

    O CSS que usaremos tem pontos específicos aos quais devemos prestar atenção. Por isso, vamos ver por trechos:

    A área de upload é definida pelo CSS a partir de um espaço abrangente. O label, vai ser a referência que vamos usar para atingir toda a área pré-determinada e é o que vai também receber o estilo que indicará onde e quando pode soltar o objeto. Dessa forma, deve estar com um position: absolute, pegando toda a área do upload. Um detalhe importante é que esse label não pode possuir filhos com eventos do mouse, pois isso pode acarretar em funcionamento inadequado ao fazer um hover em uma área não indicada.

    A área marcada como hightlight é justamente para demonstrar ao usuário que ele já pode soltar o arquivo.

    O input vai nos servir de área de drop. Isso já é um padrão tanto para Windows, MacOS e Linux – de receber um (ou mais arquivos) arrastando os dados para o botão. Retirando a aparência padrão, podemos nos aproveitar dessa função e economizar várias linhas de código do Javascript. Não havendo a necessidade de configurarmos eventos de arquivos.

    Talvez a área que possa confundir um pouco mais, principalmente os mais novatos, seja o CSS referente as barras de loading. As barras são definidas como relative e seu conteúdo como absolute. Dessa forma, podemos herdar a porcentagem do upload e usá-la diretamente no min-width do elemento. Usamos min-width, ao invés de width para utilizar o transition, dando uma leveza no upload ao invés de pequenos estalos.

    Javascript

    Inicialmente iremos definir os efeitos de drag and drop. Utilizaremos os eventos específicos para adicionar ou retirar o css de hightlight. Aquele que falamos acima ao montar o CSS.

    Agora precisamos validar os dados antes de colocar em nosso servidor. Compusemos uma validação que verifica o tipo de arquivo e a quantidade máxima de 2MB. Essa validação é totalmente no front-end. É recomendado que você também faça uma validação posterior no back-end para evitar fraudes. Essa função receberá como parâmetro um arquivo, o qual faremos a validação.

    Para enviar os arquivos, usaremos uma função AJAX simples. Fazemos um request no método POST. Nesta função, iremos capturar também a porcentagem do upload e atualizaremos a barra a partir desta, através do evento progress. Essa nossa função receberá o índice, para identificar o arquivo que está sendo enviado e a barra que será modificada.

    Por fim, iremos juntar um pouco de cada coisa que fizemos, adicionando uma função em um evento change do input do upload. Neste momento, também é feito o laço dentre o(s) arquivo(s) selecionado(s) para validar e, se for válido, fazer o upload, utilizando os outros métodos acima mencionados. É neste momento também que serão criadas dinamicamente as barras: uma para cada arquivo.

    PHP

    E pra terminar com chave de ouro, um PHPzinho que receberá esses arquivos e retornará um json com a confirmação de sucesso ou erro. Não aplicamos muitas validações nesse PHP pois nosso foco era neste exemplo está no front-end, mas é suficiente para que você compreenda sua funcionalidade.

    E, como sempre, você pode baixar o código inteiro no Github e usar direto na sua aplicação.

    Download

    Gostou? Se sim, compartilha com seus amiguinhos interessados na área e curte a página no Facebook. O exemplo acima está levemente modificado para que funcione melhor aqui no site. Entre também no grupo de Design e Desenvolvimento. O link está abaixo do post.

  • Como Preencher Dados da Empresa pelo CNPJ Dinamicamente (com PHP ou Java)

    Como Preencher Dados da Empresa pelo CNPJ Dinamicamente (com PHP ou Java)

    Dentro do design de interação, a automação de dados é importante para agilizar cadastros, além de garantir uma maior segurança dessas informações. Preencher dinamicamente o máximo de campos possível é sempre uma opção interessante para otimizar processos e manter um ambiente ágil.

    Uma das formas mais utilizadas é o preenchimento automático de endereço a partir do CEP (clique aqui, caso queira saber como fazer). Porém, uma outra alternativa muito interessante, e sempre procurada, é o preenchimento dinâmico dos dados de uma empresa a partir do CNPJ.

    Para isso, há uma API pública bem interessante de uma organização chamada ReceitaWS, que é uma empresa destinada a fornecer dados de pessoas jurídicas a partir da Receita Federal. Sua API pública é bem funcional e garante uma quantidade enorme de CNPJs atualizados. O ReceitaWS também possui uma API comercial para quem precisa de dados mais refinados e precisos.

    Obs. Só deixando claro que isto NÃO é um anúncio.

    Conectando com o ReceitaWS

    A API do ReceitaWS aconselha o acesso via cURL. Falando de forma simples, é como se o servidor fizesse o acesso a um site como se fosse um navegador. Por questões de segurança e para impedir o acúmulo de processos, muitas APIs bloqueiam o acesso direto. Por isso a comunicação não pode ser feita apenas com a URL.

    Apesar de ser possível fazer acesso cURL em praticamente qualquer linguagem, vamos usar PHP (atualização: ou Java) no nosso exemplo, por você poder usar em praticamente qualquer hospedagem.

    Esse acesso deverá ser feito para a URL: https://www.receitaws.com.br/v1/cnpj/[cnpj], onde [cnpj] corresponde ao número do CNPJ que você irá consultar.

    Para iniciar, devemos criar um arquivo onde vai ser carregado os dados e impresso o retorno.

    cnpj.php

    É extremamente importante que o nosso arquivo possua um cabeçalho que imprima como text/plain. Isso porque teremos uma resposta em jSon e passar este cabeçalho irá garantir a leitura correta dos dados.

    header("Content-Type: text/plain");

    Em seguida, devemos capturar o CNPJ enviado pela requisição e guardar em uma variável.

    $cnpj = $_REQUEST["cnpj"];

    Agora começa a parte interessante. Iremos usar o método cURL do PHP para poder acessar a URL e passar o CNPJ. Leias os comentários para entender seu funcionamento.

    $ch = curl_init(); //Inicializa
    curl_setopt($ch, CURLOPT_URL, "https://www.receitaws.com.br/v1/cnpj/".$cnpj); //Acessa a URL
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //Permite a captura do Retorno
    $retorno = curl_exec($ch); //Executa o cURL e guarda o Retorno em uma variável
    curl_close($ch); //Encerra a conexão
    

    Por fim, devemos terminar com a impressão do retorno.
    Para o retorno poder ser lido de forma simples, mesmo que por um humano, iremos usar o JSON_PRETTY_PRINT. Para isso, temos que converter a String de retorno usando o método Json Decode, em seguida imprimindo o resultado com o JSON_PRETTY_PRINT.

    $retorno = json_decode($retorno); //Ajuda a ser lido mais rapidamente
    echo json_encode($retorno, JSON_PRETTY_PRINT);
    

    O código completo ficará:

    <?php
    //Garantir que seja lido sem problemas
    header("Content-Type: text/plain");
    
    //Capturar CNPJ
    $cnpj = $_REQUEST["cnpj"];
    
    //Criando Comunicação cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.receitaws.com.br/v1/cnpj/".$cnpj);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Descomente esta linha apenas se você não usar HTTPS, ou se estiver testando localmente
    $retorno = curl_exec($ch);
    curl_close($ch);
    
    $retorno = json_decode($retorno); //Ajuda a ser lido mais rapidamente
    echo json_encode($retorno, JSON_PRETTY_PRINT);
    
    ?>

    Se quiser testar, basta acessar o seu arquivo php pelo navegador, por exemplo:
    seusite.com/pasta/cnpj.php?cnpj=XXXXXXXXXXXXX

    Atualização (Java):

    Você também pode fazer com Java. O exemplo abaixo é uma forma bem simples de fazer.

    <%@ page contentType="text/plain; charset=utf-8" language="java" errorPage="" %>
    <%@page import="java.io.*"%>
    <%@page import="java.net.URL"%>
    <%
    URL url = new URL("https://www.receitaws.com.br/v1/cnpj/"+request.getParameter("cnpj"));
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) {
     for (String line; (line = reader.readLine()) != null;) {
     out.println(line);
     }
    }
    %>

    Evitando acessos externos

    Por segurança, precisamos evitar que outros sites acessem o nosso json. Isso para evitar que o servidor caia devido a diversas requisições de fontes desconhecidas. A forma mais simples de fazer isso, e compatível com praticamente qualquer hospedagem / servidor, é através do arquivo .htaccess.

    Na mesma pasta onde foi criado o arquiv cnpj.php deve ser criado um arquivo chamado:

    .htaccess

    Nesse arquivo deve conter as seguintes informações:

    #Evitar Acesso Externo
    Order Deny,Allow
    Deny from all
    Allow from 127. #localhost

    Basicamente, o que está sendo dito é que nenhum servidor pode acessar o conteúdo desta pasta, exceto o localhost (127.0.0.1). Caso você queira adicionar mais algum IP autorizado, basta adicionar o IP ou domínio do endereço que deseja.

    ATENÇÃO: Caso você seja usuário Cloudflare, adicone os seguintes IPs em sua lista de permissões do .htaccess:

    Allow from 199.27.128.0/21
    Allow from 173.245.48.0/20
    Allow from 103.21.244.0/22
    Allow from 103.22.200.0/22
    Allow from 103.31.4.0/22
    Allow from 141.101.64.0/18
    Allow from 108.162.192.0/18
    Allow from 190.93.240.0/20
    Allow from 188.114.96.0/20
    Allow from 197.234.240.0/22
    Allow from 198.41.128.0/17
    Allow from 162.158.0.0/15
    Allow from 104.16.0.0/12
    Allow from 172.64.0.0/13

    Atualização (Java):

    Caso você use o Java, a forma de configurar as permissões de acesso irá variar de acordo com o servidor que você utilizar.

    Caso você utilize o Tomcat, você deve utilizar o CORS para fazer esse controle de permissão.

    Para isso, edite o arquivo web.xml, e procure pelo filtro do CORS. O bloco deverá ficar algo semelhante ao código abaixo, segundo a mesma lógica do exemplo acima, do PHP:

    <filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
         <param-name>cors.allowOrigin</param-name>
            <param-value>127.0.0.1</param-value>
        </init-param>
        <init-param>
         <param-name>cors.supportedMethods</param-name>
            <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
        </init-param>
        <init-param>
           <param-name>cors.supportedHeaders</param-name>
           <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>Set-Cookie</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    OBS. O uso do CORS pode dar problemas com clientes que façam acesso por cliente sem DNS, ou seja, com acesso que não é feito por conexão http ou https, como por exemplo,
    o Cordova/Phonegap. Nesse caso, aconselha-se simplesmente não usar o CORS, ou editar a bibliotca.

    Enviando o CNPJ e Imprimindo os Dados da Empresa

    Já para imprimir os dados e ler o json de retorno, precisamos usar um formulário HTML e um pouco de Javascript. Para poder facilitar a compreensão, usaremos o bom e velho jQuery, já explicado em conteúdos anteriores.

    A primeira coisa é criar o formulário que devemos usar.

    form.html

    <!--Importando Script Jquery-->
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    
    <!--Formulário-->
    <form id="post">
      <label for="cnpj">CNPJ</label>
      <input id="cnpj" required type="text">
      <br/>
      <label for="nome">Razão Social</label>
      <input id="nome" type="text">
      <br/>
      <label for="fantasia">Nome Fantasia</label>
      <input id="fantasia" type="text">
      <br/>
      <label for="atividade">Atividade Principal</label>
      <input id="atividade" type="text">
      <br/>
      <label for="telefone">Telefone</label>
      <input id="telefone" required type="text">
      <br/>
      <label for="email">E-mail</label>
      <input id="email" type="text">
      <br/>
      <label for="cep">CEP</label>
      <input id="cep" type="text">
      <br/>
      <label for="logradouro">Logradouro</label>
      <input id="logradouro" type="text">
      <br/>
      <label for="numero">Número</label>
      <input id="numero" type="text">
      <br/>
      <label for="complemento">Complemento</label>
      <input id="complemento" type="text">
      <br/>
      <label for="bairro">Bairro</label>
      <input id="bairro" type="text">
      <br/>
      <label for="uf">Estado</label>
      <select id="uf">
        <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>
    </form>
    

    Como iremos aplicar a consulta após o usuário deixar o campo CNPJ, deveremos adicionar a chamada no focusout do CNPJ, ficando

    <script type="text/javascript">
    	$("#cnpj").focusout(function(){
    	//Aqui vai o código		
    	});
    </script>

    Agora é bem simples. Basta usarmos o método Ajax, que já utilizamos em tutoriais anteriores para fazermos conexões. O código abaixo possui diversos comentários para facilitar o entendimento de cada bloco.

    <script type="text/javascript">
    	$("#cnpj").focusout(function(){
    		//Início do Comando AJAX
    		$.ajax({
    			//O campo URL diz o caminho de onde virá os dados
    			//É importante concatenar o valor digitado no CNPJ
    			url: '/pasta/cnpj.php?cnpj='+$("#cnpj").val(),
    //Atualização: caso use java, use cnpj.jsp, usando o outro exemplo.
    			//Aqui você deve preencher o tipo de dados que será lido,
    			//no caso, estamos lendo JSON.
    			dataType: 'json',
    			//SUCESS é referente a função que será executada caso
    			//ele consiga ler a fonte de dados com sucesso.
    			//O parâmetro dentro da função se refere ao nome da variável
    			//que você vai dar para ler esse objeto.
    			success: function(resposta){
    				//Confere se houve erro e o imprime
    				if(resposta.status == "ERROR"){
    					alert(resposta.message + "\nPor favor, digite os dados manualmente.");
    					$("#post #nome").focus().select();
    					return false;
    				}
    				//Agora basta definir os valores que você deseja preencher
    				//automaticamente nos campos acima.
    				$("#post #nome").val(resposta.nome);
    				$("#post #fantasia").val(resposta.fantasia);
    				$("#post #atividade").val(resposta.atividade_principal[0].text + " (" + resposta.atividade_principal[0].code + ")");
    				$("#post #telefone").val(resposta.telefone);
    				$("#post #email").val(resposta.email);
    				$("#post #logradouro").val(resposta.logradouro);
    				$("#post #complemento").val(resposta.complemento);
    				$("#post #bairro").val(resposta.bairro);
    				$("#post #cidade").val(resposta.municipio);
    				$("#post #uf").val(resposta.uf);
    				$("#post #cep").val(resposta.cep);
    				$("#post #numero").val(resposta.numero);
    			}
    		});
    	});
    </script>

    Que tal agora testarmos o funcionamento?

    Digite um CNPJ (apenas números) no campo CNPJ abaixo e depois saia dele (focusout), clicando em outro campo ou pressionando a tecla TAB de seu teclado.














     

     

    Baixe o exemplo no GitHub:
    Download
    É mais fácil do que parece, não é? Aproveite para compartilhar isso com seus amigos que estão estudando ou que essa informação possa ser útil 👍. Aproveite e deixe um like na nova página da Velhobit, no Facebook.

     

  • Como preencher o Endereço Automaticamente a Partir do CEP?

    Como preencher o Endereço Automaticamente a Partir do CEP?

    Para melhorar a experiência do usuário, profissionais front-end costumam buscar formas de automatizar certos preenchimentos de cadastros. Além disso, essas formas de carregamento trazem mais integridade para os dados, diminuindo ou evitando a digitação errada de campos que podem vir a ser usados em busca. Sem dúvida, um dos carregamentos dinâmicos mais usados em cadastros é a busca automática por CEP.

    Para este exemplo/tutorial, iremos usar jQuery e HTML.

    Carregando o Endereço Dinamicamente pelo CEP

    Talvez o mais famoso repositório público para preenchimento de CEP (sem a necessidade de uma integração com os Correios), deve ser o ViaCEP.

    A API do ViaCEP possui uma integração com json, que é o que usaremos aqui.

    O ViaCEP nos retorno os seguintes dados, com as respectivas chaves:

    • “cep”,
    • “logradouro”,
    • “complemento”,
    • “bairro”,
    • “localidade”,
    • “uf”,
    • “unidade”,
    • “ibge”,
    • “gia”

    Para exemplificarmos, vamos usar um formulário HTML simples: (Usaremos a base de estados capturado a partir do GitHub de Cassio Cardoso)

    <!--Importando Script Jquery-->
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    
    <!--Formulário-->
    <form>
    <label for="cep">CEP</label>
    		<input id="cep" type="text" required/>
    <label for="logradouro">Logradouro</label>
    		<input id="logradouro" type="text" required/>
    <label for="numero">Número</label>
    		<input id="numero" type="text" />
    <label for="complemento">Complemento</label>
    		<input id="complemento" type="text"/>
    <label for="bairro">Bairro</label>
    		<input id="bairro" type="text" required/>
    <label for="uf">Estado</label>
    		<select id="uf">
    			<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>
    </form>

    Agora vamos executar uma função para que no momento após sair do campo CEP, ele faça a busca e preencha os demais campos. Como é no momento após deixar o campo, iremos vincular ao evento focusout.

    <script type="text/javascript">
    	$("#cep").focusout(function(){
    	//Aqui vai o código		
    	});
    </script>

    Agora temos que chamar a API json dentro da nossa função. Para isso, vamos utilizar o comando $.ajax, do jQuery.

    Obs. Acompanhe os comentários no código para entender cada linha.

    <script type="text/javascript">
    	$("#cep").focusout(function(){
    		//Início do Comando AJAX
    		$.ajax({
    			//O campo URL diz o caminho de onde virá os dados
    			//É importante concatenar o valor digitado no CEP
    			url: 'https://viacep.com.br/ws/'+$(this).val()+'/json/unicode/',
    			//Aqui você deve preencher o tipo de dados que será lido,
    			//no caso, estamos lendo JSON.
    			dataType: 'json',
    			//SUCESS é referente a função que será executada caso
    			//ele consiga ler a fonte de dados com sucesso.
    			//O parâmetro dentro da função se refere ao nome da variável
    			//que você vai dar para ler esse objeto.
    			success: function(resposta){
    				//Agora basta definir os valores que você deseja preencher
    				//automaticamente nos campos acima.
    				$("#logradouro").val(resposta.logradouro);
    				$("#complemento").val(resposta.complemento);
    				$("#bairro").val(resposta.bairro);
    				$("#cidade").val(resposta.localidade);
    				$("#uf").val(resposta.uf);
    				//Vamos incluir para que o Número seja focado automaticamente
    				//melhorando a experiência do usuário
    				$("#numero").focus();
    			}
    		});
    	});
    </script>

    Simples, não é?

    Essa mesma lógica você pode usar para poder dinamicamente diversos outros tipos de dados, inclusive alguns vindo do banco. Se quiser saber mais como usar o Json com PHP e jQuery, assista nosso vídeo tutorial sobre o assunto.

    Vamos testar e ver como fica:












    Abaixo, você pode ver o código completo:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Teste</title>
    </head>
    
    <body>
    	<!--Importando Script Jquery-->
    	<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    
    	<!--Formulário-->
    	<form>
    		<label for="cep">CEP</label>
    		<input id="cep" type="text" required/>
    		<label for="logradouro">Logradouro</label>
    		<input id="logradouro" type="text" required/>
    		<label for="numero">Número</label>
    		<input id="numero" type="text" />
    		<label for="complemento">Complemento</label>
    		<input id="complemento" type="text"/>
    		<label for="bairro">Bairro</label>
    		<input id="bairro" type="text" required/>
    		<label for="uf">Estado</label>
    		<select id="uf">
    			<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>
    	</form>
    	
    	<script type="text/javascript">
    		$("#cep").focusout(function(){
    			//Início do Comando AJAX
    			$.ajax({
    				//O campo URL diz o caminho de onde virá os dados
    				//É importante concatenar o valor digitado no CEP
    				url: 'https://viacep.com.br/ws/'+$(this).val()+'/json/unicode/',
    				//Aqui você deve preencher o tipo de dados que será lido,
    				//no caso, estamos lendo JSON.
    				dataType: 'json',
    				//SUCESS é referente a função que será executada caso
    				//ele consiga ler a fonte de dados com sucesso.
    				//O parâmetro dentro da função se refere ao nome da variável
    				//que você vai dar para ler esse objeto.
    				success: function(resposta){
    					//Agora basta definir os valores que você deseja preencher
    					//automaticamente nos campos acima.
    					$("#logradouro").val(resposta.logradouro);
    					$("#complemento").val(resposta.complemento);
    					$("#bairro").val(resposta.bairro);
    					$("#cidade").val(resposta.localidade);
    					$("#uf").val(resposta.uf);
    					//Vamos incluir para que o Número seja focado automaticamente
    					//melhorando a experiência do usuário
    					$("#numero").focus();
    				}
    			});
    		});
    	</script>
    </body>
    </html>
    
  • Implementando a Integração entre PHP + jQuery + jSon

    Implementando a Integração entre PHP + jQuery + jSon

    Hoje estou postando um vídeo tutorial para quem ainda não conhece jSon, poder entender o funcionamento básico do compartilhamento de dados usando essa tecnologia.Como base, usaremos o PHP e o jQuery (ótima biblioteca Javascript).

    Claro que por se tratar de um vídeo não é tão fácil ficar acompanhando o código. Por isso mesmo, estamos disponibilizando aqui o código para que você possa entender.

    Aproveite e deixe um comentário aqui em baixo, ou no YouTube e assine o nosso canal!

    Script para criar a tabela no postgres:

    CREATE TABLE jogos
    (
    id serial NOT NULL,
    nome text,
    console text,
    preco numeric(10,2)
    )

    dados.php:

    /**
     * Tutorial jSON
     */
    
    //Definir formato de arquivo
     header('Content-Type:' . "text/plain");
    
    $host = "localhost"; // IP do Banco
     $user = "postgres"; // Usuário
     $pswd = "postgres"; // Senha
     $dbname = "tutoriais"; // Banco
     $con = null; // Conexão
    
    $con = @pg_connect("host=$host user=$user password=$pswd dbname=$dbname") or die (pg_last_error($con));
    
    //@pg_close($con); //Encerrrar Conexão
    
    if(!$con) {
     echo '[{"erro": "Não foi possível conectar ao banco"';
     echo '}]';
     }else {
     //SQL de BUSCA LISTAGEM
     $sql = "SELECT * FROM jogos ORDER BY console";
     $result = pg_query($sql); //Executar a SQL
     $n = pg_num_rows($result); //Número de Linhas retornadas
    
    if (!$result) {
     //Caso não haja retorno
     echo '[{"erro": "Há algum erro com a busca. Não retorna resultados"';
     echo '}]';
     }else if($n<1) {
     //Caso não tenha nenhum item
     echo '[{"erro": "Não há nenhum dado cadastrado"';
     echo '}]';
     }else {
     //Mesclar resultados em um array
     for($i = 0; $i<$n; $i++) { $dados[] = pg_fetch_assoc($result, $i); } echo json_encode($dados, JSON_PRETTY_PRINT); } } ?>


    index.html:

    <!DOCTYPE HTML>
    <html lang="pt-br">
    	<head>
    		<meta charset="UTF-8">
    		<link rel="icon" type="favicon.png" />
    		<link rel="stylesheet" type="text/css" href="estilo.css">
    		
    		<!--jQuery-->
    		<script src="http://code.jquery.com/jquery-2.0.3.min.js" type="text/javascript"></script>
    		<!--Script-->
    		<script src="script.js" type="text/javascript"></script>
    		
    		
    	</head>
    	<body onload="carregarItens()">
    		<section>
    			<h1>PortilloDesign Tutorial JSON + PHP</h1>
    			<!--Área que mostrará carregando-->
    			<h2></h2>
    			<!--Tabela-->
    			<table id="minhaTabela">
    				<caption>Cadastro de Jogos</caption>
    				<thead>
    					<th>ID</th>
    					<th>Jogo</th>
    					<th>Console</th>
    					<th>Valor</th>
    				</thead>
    				<tbody>
    				</tbody>
    			</table>
    		</section>
    	</body>
    </html>

    script.js:

    /**
    * Capturar itens do banco de dados
    */
    function carregarItens(){
    	//variáveis
    	var itens = "", url = "dados/dados.php";
    
        //Capturar Dados Usando Método AJAX do jQuery
        $.ajax({
    	    url: url,
    	    cache: false,
    	    dataType: "json",
    	    beforeSend: function() {
    		    $("h2").html("Carregando..."); //Carregando
    	    },
    	    error: function() {
    		    $("h2").html("Há algum problema com a fonte de dados");
    	    },
    	    success: function(retorno) {
    		    if(retorno[0].erro){
    			    $("h2").html(retorno[0].erro);
    		    }
    		    else{
    			    //Laço para criar linhas da tabela
    			    for(var i = 0; i<retorno.length; i++){
    				    itens += "<tr>";
    				    itens += "<td>" + retorno[i].id + "</td>";
    				    itens += "<td>" + retorno[i].nome + "</td>";
    				    itens += "<td>" + retorno[i].console + "</td>";
    				    itens += "<td>" + retorno[i].preco + "</td>";
    				    itens += "</tr>";
    			    }
    			    //Preencher a Tabela
    			    $("#minhaTabela tbody").html(itens);
    			    
    			    //Limpar Status de Carregando
    			    $("h2").html("Carregado");
    		    }
    	    }
        });
    }