Ошибка при соединении с сервером API с использованием вызовов AJAX - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь связаться с JDoodle API Server, используя JavaScript (JQuery), но каждый раз, когда он говорит, ошибка CORS. Но когда я проделал то же самое с использованием Java-сервлетов, он отлично работал. Я использовал axios, но он также говорит «Ошибка сети». Моя функция выглядит так:

function x()
        {
            var dataJ = {
                clientId: ''XXXXXXXXX,
                clientSecret:'XXXXXXXXXX',
                language:'PHP',
                script:'',
                versionIndex: '0'
            };
            $.ajax({
                type:'POST',
                url:'https://api.jdoodle.com/v1/execute/',
                data: dataJ,
                success: function(e)
                {
                    console.log(e);
                },
                error: function(e)
                {
                    console.log(e.statusText);
                }
            });
        }

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

CORS контролируется внутренним API, и в вашем случае у вас нет контроля над ним, который равен https://api.jdoodle.com/v1/execute/.

Браузер не позволяет вашему коду получить доступ к ответу, потому что браузер не видит Access-Control-Allow-Origin в ответе.

Все еще может работать, если запрос через прокси-сервер отправляет прокси-сервер.соответствующий заголовок CORS от имени вашего запроса.

const proxy = "https://cors-anywhere.herokuapp.com/";
const url = "https://api.jdoodle.com/v1/execute/"; 
fetch(proxy + url)
  .then(response => response.text())
  .then(contents => console.log(contents))
  .catch(() => console.log("CORS Error" + url ))

Для вашего случая

const proxy = "https://cors-anywhere.herokuapp.com/";
const url = "https://api.jdoodle.com/v1/execute/";

function x() {
  var dataJ = {
    clientId: "XXXXX",
    clientSecret: "XXXXXXXXXX",
    language: "PHP",
    script: "",
    versionIndex: "0"
  };
  $.ajax({
    type: "POST",
    url: proxy + url,
    data: dataJ,
    success: function(e) {
      console.log(e);
    },
    error: function(e) {
      console.log(e.statusText);
    }
  });
}

Выполнение запроса через прокси будет работать таким образом

  1. Прокси-сервер CORS перенаправит ваш запрос на https://api.jdoodle.com/v1/execute/
  2. Ответ от https://api.jdoodle.com/v1/execute/ с Access-Control-Allow-Origin заголовками.
  3. Теперь ваш браузер может видеть Access-Control-Allow-Origin заголовков, присутствующих в ответеheader.

Для более подробного объяснения вы можете проверить это

https://stackoverflow.com/a/43881141/2850383

0 голосов
/ 17 мая 2019

это политика безопасности, которая не позволяет другому клиенту использовать функциональность сайта:

см. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

только страница этого сайта может отправлять сообщения на сайт или этот сайт активный allow-access-allow-origin на своем сайте

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