3
respostas

preenchendo formulario html automaticamente com ajax

Estou tentando reproduzir o conteúdo desse artigo (https://www.alura.com.br/artigos/preenchendo-formulario-html-automaticamente-com-ajax), mas quando tento adicionar o evento de buscar cep no botão dá o seguinte erro: Cannot read property 'addEventListener' of null.

function buscaCep(){

    let inputCep = document.querySelector('input[name=cep]');
    let cep = inputCep.value.replace('-', '');

    let url = 'http://viacep.com.br/ws/' + cep + '/json';

    let xhr = new XMLHttpRequest();


    xhr.open('GET', url, true);


    xhr.onreadystatechange = function () {
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                preencheCampos(JSON.parse(xhr.responseText));
            }
        }
        xhr.send();
    }
}

function preencheCampos(json) { 

    document.querySelector('input[name=endereco]').value = json.logradouro;
    document.querySelector('input[name=bairro]').value = json.bairro; 
    document.querySelector('input[name=complemento]').value = json.complemento;
    document.querySelector('input[name=cidade]').value = json.localidade; 
    document.querySelector('input[name=estado]').value = json.uf; 
}

const botaoBuscaCep = document.querySelector('#o-button--gary');
botaoBuscaCep.addEventListener('click', buscaCep);

O HTML eu copiei o disponibilizado pelo próprio autor do artigo, e chamo o

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax com JS Puro</title>
    <link href="asserts/stylesheets/stilize/stilize.min.css" rel="stylesheet" type="text/css">
</head>
<body>
    <form class="o-form">
        <div class="o-navbar--gary">Buscando CEP com requisição JAX</div>
        <div class="o-form__body o-form__body--padding">
            <div class="l-row">
                <div class="u-grid--2">
                    <label for="" class="o-form__text">CEP</label>
                    <div class="o-form__group">
                        <input class="o-form__data" name="cep" type="text">
                        <span class="o-form__groupElement"><button class="o-button--gary"><i class="icon-globe"></i></button></span>
                    </div>
                </div>
                <div class="u-grid--8">
                    <label for="" class="o-form__text">Endereço</label>
                    <input class="o-form__data" name="endereco" type="text">
                </div>
                <div class="u-grid--2">
                    <label for="" class="o-form__text">Numero</label>
                    <input class="o-form__data" name="numero" type="text">
                </div>
            </div>
            <div class="l-row">
                <div class="u-grid--8">
                    <label for="" class="o-form__text">Bairro</label>
                    <input class="o-form__data" name="bairro" type="text">
                </div>
                <div class="u-grid--4">
                    <label for="" class="o-form__text">Complemento</label>
                    <input class="o-form__data" name="complemento" type="text">
                </div>
            </div>
            <div class="l-row">
                <div class="u-grid--10">
                    <label for="" class="o-form__text">Cidade</label>
                    <input class="o-form__data" name="cidade" type="text">
                </div>
                <div class="u-grid--2">
                    <label for="" class="o-form__text">Estado</label>
                    <input class="o-form__data" name="estado" type="text">
                </div>
            </div>
        </div>
    </form>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>
3 respostas

Fala ai Nathalia, tudo bem? Olhando aqui na página, vemos como o seu botão foi definido:

<button class="o-button--gary"><i class="icon-globe"></i></button>

Agora olhando o código JavaScript que busca a referência desse botão:

const botaoBuscaCep = document.querySelector('#o-button--gary');

Repare que a busca está sendo feita por id (#), mas, deveria ser por classe (.).

Tente mudar para:

const botaoBuscaCep = document.querySelector('.o-button--gary');

Espero ter ajudado.

Oi! Primeiro, obrigada pela resposta! Eu mudei, e realmente parou de retornar o erro. Porém, ainda não realiza a busca do cep na API. Não me retorna nada quando aperto o botão

Fala Nathalia, pode ser que a requisição não esteja sendo disparada por N razões.

Recomendo você trocar o uso da XMLHttpRequest para a Fetch API: https://blog.matheuscastiglioni.com.br/realizando-requisicoes-ajax-com-fetch-api

Espero ter ajudado.