Как отправить данные кроcсдоменным POST-ом в JS и обработать на PHP?

Здравствуйте.

Суть вопроса такова:

С одного домена на другой отправляются данные POST-ом, данные принимаются и обрабатываются надлежащим образом. Это в теории. Но на практике как-то не получается передать данные. Пробовал отправлять GET-ом - все работает, данные приходят, делаю все тоже самое POST-ом - бесполезно.

var r = new XMLHttpRequest();

r.open("POST", "https://url/index/php", true);
r.send("name=AlexRAV");


На PHP условно говоря написан просто перебор свойств POST-а и ввод их на экран.

Оба домена используют https, заголовок Access-Control-Allow-Origin: url прописан.

jQuery принципиально не использую, стараюсь перейти на ванильный JS.
  • Вопрос задан
  • 511 просмотров
Пригласить эксперта
Ответы на вопрос 3
@KuzmenkoArtem
Скорее всего у вас нет обработки OPTIONS запросов.
Зайдите во вкладку NETWORKS в инструментах разработчика в google chrome и просмотрите какие запросы отправляет браузер.
Обычно когда выполняется кроссдоменный запрос отличный от GET, перед ним отправляется запрос OPTIONS который должен сказать какие можно использовать запросы.

Вы можете прописать обработку OPTIONS запросов на той странице на которую подаете запрос
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS"){
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
    header("Access-Control-Allow-Headers: Accept, X-Requested-With, X-Accept-Charset,X-Accept,Content-Type,Accept-Language,Accept-Charset,X-Request-With,Content-Length,Accept,Origin");
    header("Access-Control-Allow-Credentials: true");
    header("Allow: GET, POST, PUT, DELETE, OPTIONS");
    
    return "status: 200";
}
Ответ написан
Комментировать
@Levhav
Возьмусь за разработку проектов любой сложности.
Может заголовок не до указали. Если Content-Type не задать то данные могут попасть не в $_POST а в $_SERVER в какое то поле, не помню какое именно.

var r = new XMLHttpRequest();
    request.open("POST", pushCentrApi.prototype.getUrl(), true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send(name=AlexRAV);
Ответ написан
Вот тут много всяких способов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы