Si recibe este mensaje de error del navegador:
No hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, el origen '...' no tiene acceso permitido
cuando intente hacer una solicitud Ajax POST / GET a un servidor remoto que está fuera de su control, olvide esta solución simple:
<?php header('Access-Control-Allow-Origin: *'); ?>
Lo que realmente necesita hacer, especialmente si solo usa JavaScript para hacer la solicitud de Ajax, es un proxy interno que tome su consulta y la envíe al servidor remoto.
Primero en su JavaScript, haga una llamada Ajax a su propio 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);
}
});
Luego, cree un archivo PHP simple llamado proxy.php para envolver sus datos POST y agregarlos al servidor de URL remoto como parámetros. Te doy un ejemplo de cómo evito este problema con la API de búsqueda de hoteles de 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));
}
Haciendo:
echo json_encode(file_get_contents($url));
Simplemente está haciendo la misma consulta pero en el lado del servidor y después de eso, debería funcionar bien.