Ajax-запрос к restful api из другого домена - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть успокоительный API, который работает нормально, когда я звоню от почтальона. На почтальоне я даю следующую конфигурацию, чтобы получить ответ: -Пост: "https://www.example.net/API/MyFunction" У меня нет разрешения. -Headers: Тип контента: приложение / JSON, Имя пользователя: MyUserName, Пароль: мойпароль -Боди сырец

{"firstparameter":"firtparameter_value"}

У меня есть чистый домен HTML, где я хотел бы сделать несколько звонков и предоставить данные из этого API. Поэтому я добавил ссылку на jquery-3.3.1.js и создал вызов ajax. Я пытался следовать этому руководству https://www.html5rocks.com/en/tutorials/cors/, но когда я запускаю вызов, я получаю нижнюю ошибку. Ajax call:

 var username = 'myusername';
 var password = 'mypassword';
$.ajax({

    type: 'POST',
    dataType: "jsonp",

    url: 'https://www.example.net/API/MyFunction',


    contentType: 'text/plain',
    crossDomain: true,
    data:{"firstparameter":"firtparameter_value"},
    xhrFields: {

        withCredentials: false
    },

    headers: {


        username: username,
        password: password
    },

    success: function () {


    error: function () {

    }
});

ошибка, которую я получаю:

GET https://www.example.net/API/MyFunction/?callback=jQuery33104247946565223606_1541427224545&firstparameter=firtparameter_value&_=1541427224546 net :: ERR_ABORTED 405 (метод не разрешен)

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018
type: 'POST',
dataType: "jsonp",

JSONP-запросы работают, внедряя элемент <script src>, который делает GET-запрос. Свойство метода игнорируется jQuery при использовании JSONP.

Вы не можете сделать запрос POST с JSONP.

API-интерфейс REST вряд ли вернет JSONP (который был хаком для обхода единой политики происхождения в старые добрые времена, когда у нас не было CORS ), и, как и CORS, он должен быть настроен на сервер ). Ваш API, конечно, не делает этого, потому что он говорит вам, что метод GET (необходимый для JSONP) недопустим.

Установите правильное значение для dataType.


У вас есть другие проблемы, но они не связаны с сообщением об ошибке.

Вы сказали "-Headers: Content-Type : application/json", но затем в JS "contentType: 'text/plain'" - используйте правильный тип контента.

Вы сказали "data:{"firstparameter":"firtparameter_value"}", но jQuery закодирует это в формате URL, а не в формате JSON. Вам необходимо явно закодировать его как JSON с помощью JSON.stringify.

0 голосов
/ 05 ноября 2018

Эта ошибка возникает всякий раз, когда вы пытаетесь вызвать функцию API с неправильным методом, например, вызвать функцию POST с помощью вызова Get Ajax.

Вы должны быть уверены, что ваш бэкэнд имеет метод, который вы вызываете из ajax как POST

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...