might
@might
javascript developer

Как правильно отправлять с помощью ajax post запрос на другой сервер/домен?

Пробую так
var data = {
    name: 'test',
    surname: 'test',
    hobbies: ['hobby1','hobby2','hobby3','hobby4'],
    location: 'test'
};
$.ajax({
                type: "POST",
                url: "http://myothersite.com/ajaxService/DoWork",
                data: JSON.stringify({data: data}),
                success: function (response) {
                    // some code
                },
                error : function (response) {
                    
                    if (typeof response !== 'undefined' && response)
                    {
                        reason = $.parseJSON(response.responseText).Message;
                    }
                    console.log(reason);
                },
                dataType: "json",
                contentType: "application/json; charset=utf-8"
            });


Но получаю такое:
Request URL:http://myothersite.com/ajaxService/DoWork
Request Method:OPTIONS
Status Code:405 Method Not Allowed

В консоле:
XMLHttpRequest cannot load myothersite.com/ajaxService/DoWork. Response for preflight has invalid HTTP status code 405


Если же тот же самый запрос шлю с домена с myothersite.com, то всё ок.
И, кстати, почему-то запрос посылается OPTIONS, а не POST, это нормально?
Заголовки прописаны на сервере:
Access-Control-Allow-Headers:Content-Type, Authorization, Accept, X-Requested-With
Access-Control-Allow-Methods:OPTIONS, TRACE, GET, HEAD, POST, PUT
Access-Control-Allow-Origin:*


Заранее спасибо.
  • Вопрос задан
  • 3949 просмотров
Пригласить эксперта
Ответы на вопрос 4
AMar4enko
@AMar4enko
OPTIONS это так называемый preflight-запрос, который предваряет любые запросы на сторонние домены, согласно требованиям CORS.
Сервер должен уметь на него отвечать (а не просто метод должен быть прописан в заголовках).
Минимально сервер на OPTIONS должен ответить 200 OK и прислать заголовки CORS-политики.
Исходя из ответа на OPTIONS браузер делает вывод - слать данные или нет. У вас сервер отвечает ошибкой.
Ответ написан
Комментировать
@Nc_Soft
ok google "CORS"
Ответ написан
Комментировать
Akdmeh
@Akdmeh
PHP, Yii2, Music
Невозможно делать AJAX-запрос на другой домен, это система безопасности браузера.
Нужно использовать технологию jsonp: https://learn.javascript.ru/ajax-jsonp
(ну как бы возможно, но проще сделать jsonp, плюс поддерживается всеми браузерами, с CORS в этом могут возникать определенные проблемы).
Ответ написан
@OlegLustenko
Сервер отвечает 405 и метод недоступен, значит так и есть. Что то не прописано, или прописано не корректно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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