Ошибка при соединении с сервером 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);
}
});
}
Выполнение запроса через прокси будет работать таким образом
- CORS прокси перенаправит ваш запрос
https://api.jdoodle.com/v1/execute/
- Ответ от
https://api.jdoodle.com/v1/execute/
сAccess-Control-Allow-Origin
заголовки. - Теперь ваш браузер может видеть
Access-Control-Allow-Origin
Заголовки присутствуют в заголовке ответа.
Для более подробного объяснения вы можете проверить это
Это политика безопасности, которая не позволяет другому клиенту использовать функциональность сайта:
см. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
только страница этого сайта может отправлять сообщения на сайт или на этот сайт активный allow-access-allow-origin на собственном сайте