Ошибка при соединении с сервером API с использованием вызовов AJAX

Я пытаюсь связаться с 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 ответа

Решение

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 Заголовки присутствуют в заголовке ответа.

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

/questions/9247073/v-zaprashivaemom-resurse-otsutstvuet-zagolovok-access-control-allow-origin-pri-popyitke-poluchit-dannyie-iz-rest-api/9247095#9247095

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

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

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

Другие вопросы по тегам