CORS / requisição WS externa

jQuery

HTML

JavaScript

PHP

23/11/2017

Prezados, boa tarde,

Tenho um JS que faz a requisição a uma API para me retornar valores.. funcionou por 5 minutos, porém após isso ele começou a me retornar o seguinte erro:

"Requisição cross-origin bloqueada: A política de mesma origem (Same Origin Policy) impede a leitura do recurso remoto em https://crossorigin.me/http://receitaws.com.br/v1/cnpj/11025025552001. (Motivo: o cabeçalho CORS 'Access-Control-Allow-Origin' não está presente)."

Já tentei colocar o header em php para habilitar o CORS e mais algumas coisas, porém, em teoria, com o crossorigin.me não haveria essa necessidade..
enfim, segue abaixo o JS

	$(document).ready(function() {

        function limpa_formulário_cnpj() {
            // Limpa valores do formulário de cnpj.
            $("#rua").val("");
            $("#bairro_emp").val("");
			$("#nr_emp").val("");
            $("#cidade").val("");
            $("#uf").val("");
            $("#emp").val("");
        }

        //Quando o campo cnpj perde o foco.
        $("#cnpj").blur(function() {

            //Nova variável "cnpj" somente com dígitos.
            var cnpj = $(this).val().replace(/\\D/g, '');

            //Verifica se campo cnpj possui valor informado.
            if (cnpj != "") {

                //Expressão regular para validar o CNPJ.
                var validacnpj = /^[0-9]/;

                //Valida o formato do CNPJ.
                if(validacnpj.test(cnpj)) {

                    //Preenche os campos com "..." enquanto consulta webservice.
                    $("#logradouro").val("...")
                    $("#bairro_emp").val("...")
					$("#nr_emp").val("...")
                    $("#municipio").val("...")
                    $("#uf").val("...")
                    $("#emp").val("...")
					//$("#cnae").val("...")

                    $.getJSON("https://crossorigin.me/http://receitaws.com.br/v1/cnpj/"+ cnpj, function(dados) {

                        if (!("erro" in dados)) {
                            //Atualiza os campos com os valores da consulta.
                            $("#logradouro").val(dados.logradouro);
							$("#nr_emp").val(dados.numero);
                            $("#bairro_emp").val(dados.bairro);
                            $("#municipio").val(dados.municipio);
                            $("#uf").val(dados.uf);
                            $("#emp").val(dados.nome);
							//$("#cnae").val(dados.text);
                        } //end if.
                        else {
                            //Cnpj pesquisado não foi encontrado.
                            limpa_formulário_cnpj();
                            alert("CNPJ não encontrado.");
                        }
                    });
                } //end if.
                else {
                    //cnpj é inválido.
                    limpa_formulário_cnpj();
                    alert("Formato de CNPJ inválido.");
                }
            } //end if.
            else {
                //cnpj sem valor, limpa formulário.
                limpa_formulário_cnpj();
            }
        });
    });


Poderiam me ajudar?
Daniel Lancellotti

Daniel Lancellotti

Curtidas 0

Melhor post

Rander Freitas

Rander Freitas

24/11/2017

Olá Daniel,

Esse erro acontece porque por questões de segurança, os navegadores atuais só permitem que se faça chamadas de dados ou scripts no mesmo domínio. Como você está tentando fazer requisições de script em domínio diferente, está obtendo essa mensagem de erro.

Qual linguagem de programação que você está usando no seu server(web services/API) ?

Vou deixar um exemplo abaixo em php e pode ser feito facilmente em outras linguagens.

Para habilitar o CORS basta você retornar um header na página solicitada o header é o Access-Control-Allow-Origin: *

Exemplo em PHP
<?php
        //habilitando o cors
        header("Access-Control-Allow-Origin: *");


Então, para "sumir" essa mensagem de erro, é necessário enviar o header acima na mesma página em que há o script em você chama a requisição script

Qualquer dúvida, avisar!

Valeu!
GOSTEI 1

Mais Respostas

Daniel Lancellotti

Daniel Lancellotti

23/11/2017

Eu resolvi de outra forma, mas com uma classe pronta.

Utilizo o PHP mesmo e o estranho é que já usei esse header e mesmo assim não funcionou.. em pesquisas na internet eu achei isso que vc falou e até outros headers que poderiam ser utilizados, porém nenhum funcionou.
Ficava algo assim:

<?php 
include ''menu.php'';
header("Access-Control-Allow-Origin: *");

?>

//resto do código HTML, js, ajax, jquery, php, etc
GOSTEI 0
POSTAR