Se você receber esta mensagem de erro do navegador:
Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado. Portanto, a origem '…' não é permitida
quando você estiver tentando fazer uma solicitação Ajax POST / GET para um servidor remoto que esteja fora de seu controle, esqueça esta simples correção:
<?php header('Access-Control-Allow-Origin: *'); ?>
O que você realmente precisa fazer, especialmente se você usa JavaScript apenas para fazer a solicitação do Ajax, é um proxy interno que pega sua consulta e a envia para o servidor remoto.
Primeiro no seu JavaScript, faça uma chamada do Ajax para o seu próprio servidor, algo como:
$.ajax({
url: yourserver.com/controller/proxy.php,
async:false,
type: "POST",
dataType: "json",
data: data,
success: function (result) {
JSON.parse(result);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr);
}
});
Em seguida, crie um arquivo PHP simples chamado proxy.php para agrupar seus dados do POST e anexá-los ao servidor de URL remoto como parâmetro. Dou um exemplo de como ignoro esse problema com a API de pesquisa do hotel Expedia:
if (isset($_POST)) {
$apiKey = $_POST['apiKey'];
$cid = $_POST['cid'];
$minorRev = 99;
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey;
echo json_encode(file_get_contents($url));
}
Fazendo:
echo json_encode(file_get_contents($url));
Você está apenas fazendo a mesma consulta, mas no lado do servidor e depois disso, deve funcionar bem.