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
заголовков, присутствующих в ответеheader.
Для более подробного объяснения вы можете проверить это
https://stackoverflow.com/a/43881141/2850383