Jeśli otrzymasz ten komunikat o błędzie z przeglądarki:
Żądany zasób nie zawiera nagłówka „Access-Control-Allow-Origin”. Dlatego też pochodzenie „…” nie jest dozwolone
kiedy próbujesz wysłać żądanie Ajax POST / GET do zdalnego serwera, na który nie masz wpływu, zapomnij o tej prostej poprawce:
<?php header('Access-Control-Allow-Origin: *'); ?>
To, co naprawdę musisz zrobić, zwłaszcza jeśli używasz JavaScript tylko do wykonania żądania Ajax, to wewnętrzny serwer proxy, który przyjmuje zapytanie i wysyła je do zdalnego serwera.
Najpierw w JavaScript wykonaj wywołanie Ajax do własnego serwera, na przykład:
$.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);
}
});
Następnie utwórz prosty plik PHP o nazwie proxy.php, aby opakować dane POST i dołączyć je do zdalnego serwera URL jako parametry. Podaję przykład, jak omijam ten problem za pomocą interfejsu API wyszukiwania hoteli 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));
}
Wykonując:
echo json_encode(file_get_contents($url));
Po prostu wykonujesz to samo zapytanie, ale po stronie serwera i po tym powinno działać dobrze.