Если вы получаете это сообщение об ошибке из браузера:
В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Происхождение «…» поэтому не допускается
когда вы пытаетесь выполнить запрос Ajax POST / GET к удаленному серверу, который находится вне вашего контроля, забудьте об этом простом исправлении:
<?php header('Access-Control-Allow-Origin: *'); ?>
Что вам действительно нужно сделать, особенно если вы используете JavaScript только для выполнения Ajax-запроса, это внутренний прокси, который принимает ваш запрос и отправляет его на удаленный сервер.
Сначала в вашем JavaScript сделайте Ajax-вызов на ваш собственный сервер, например:
$.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);
}
});
Затем создайте простой файл PHP с именем proxy.php, чтобы обернуть данные POST и добавить их на удаленный URL-сервер в качестве параметров. Я приведу пример того, как обойти эту проблему с помощью API поиска отелей 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));
}
При выполнении:
echo json_encode(file_get_contents($url));
Вы просто делаете тот же запрос, но на стороне сервера, и после этого он должен работать нормально.