Не отправляется кросс-доменный ajax-запрос

400
21 февраля 2017, 19:44

Есть ajax-запрос:

$.ajax({
    url: 'https://<?php echo getDomain($_SERVER['SERVER_NAME']); ?>/engine/search.php',
    headers: {'X-Requested-With': 'XMLHttpRequest'},
    xhrFields: { withCredentials: true },
    crossDomain: true,
    method: 'POST',
    dataType: 'json',
    data: {
        data:data
    }
});

А на стороне сервера работает скрипт, проверяющий, был ли отправлен запрос посредством ajax:

<?php
$search_data = session_name("search_data");
session_set_cookie_params(0, '/', '.skytickets.ga');
session_start();
require('functions.php');
header("Access-Control-Allow-Origin: https://search." . $_SERVER['SERVER_NAME']);
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: X-Requested-With, Origin");
header("Content-Type: application/json; charset=utf-8");
if(isAjax()) {
    $data = $_POST['data'];
    if(isset($data) && !empty($data)) {
        if(!preg_match('/[A-Z][A-Z][A-Z]/', $data['from']) && !preg_match('/[A-Z][A-Z][A-Z]/', $data['to'])) {
            header('HTTP/1.0 500 Internal Server Error');
            die('Bad IATA codes provided');
        }
        if(!validateDate($data['there']) && !validateDate($data['thence'])) {
            header('HTTP/1.0 500 Internal Server Error');
            die('Bad date format provided');
        }
        if(!preg_match('/^[1-9]*$/', $data['adults']) && !preg_match('/^[0-9]*$/', $data['teens']) && !preg_match('/^[0-9]*$/', $data['kids'])) {
            header('HTTP/1.0 500 Internal Server Error');
            die('Bad passengers data provided');
        }
        $_SESSION['search_data'] = json_encode($data, JSON_UNESCAPED_UNICODE);
        echo $_SESSION['search_data'];
        die();
    }
} else {
    header('HTTP/1.0 403 Forbidden');
    die('Access denied');
}
?>

Функция isAjax:

function isAjax() {
    return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

Перепроверил код 1000 раз, перечитал политику CORS 1000 раз и всё равно не могу понять, почему это не работает. Получаю ошибки OPTIONS 403 (Forbidden) и XMLHttpRequest cannot load. Response for preflight has invalid HTTP status code 403.

READ ALSO
phpstorm пропал пункт &ldquo;create new project from existing files&rdquo;

phpstorm пропал пункт “create new project from existing files”

Сразу оговорюсь, я джавист, и с php и, тем паче, bitrix практически не знаком, но по обстоятельствам, нужно срочно освоить данные технологии, хотя...

479
Как смешать слова из двух разных массивов?

Как смешать слова из двух разных массивов?

Есть два массива, нужно смешать слова внутри них друг с другом: например Panthera bear, Grey leucocephalus и так далее

367
JavaScript: значение параметра при повторном выполнении функции

JavaScript: значение параметра при повторном выполнении функции

По выполнении следующего кода, у нас в консоль выведется дважды true:

273
Отправка email без перезагрузки

Отправка email без перезагрузки

Добрый деньТема уже избитая, но я все равно туплю

352