Я знаю, что это такой простой код, но почему-то он не работает. Что мне делать, так это вызвать GET API:
https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908
Я хочу вызвать этот HTML с помощью JavaScript или JQuery. Я много чего пробовал, но не работает. Следующий код, который я применил, но не работает:
<!DOCTYPE html>
<html>
<body>
<button type = "button" onclick = "loadDoc()">Request data</button>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert("responseText" + this.responseText);
} else {
alert("Error");
}
};
xhttp.open("GET", "https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908", true);
xhttp.send();
}
</script>
</body>
</html>Я также попытался вызвать тот же API с JQuery с помощью Ajax. Ниже приведен код того же:
<!DOCTYPE html>
<html>
<body>
<header>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</header>
<button type = "button" onclick = "loadDoc()">Request data</button>
<script>
function loadDoc() {
$.ajax({
url:"https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908",
success:function(response){
alert(response);
},
error: function() {
alert("Error");
}
});
}
</script>
</body>
</html>Я пробовал код «XMLHttpRequest» и получаю ошибку в консоли @Hammerbot: не удалось загрузить ресурс: net :: ERR_CERT_AUTHORITY_INVALID
Всегда неплохо заглянуть в приставку: Failed to load https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908: The 'Access-Control-Allow-Origin' header has a value 'https://www.upcitemdb.com' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access.
Спасибо за подробный журнал. Можете ли вы сказать, в чем причина отказа этого API? @ Freedomn-m
Вы не можете совершать звонки на сторонние сайты, если они не установили CORS. Вот как это работает. Прочтите об одной и той же политике происхождения и COR
Итак, эта доза "upcitemdb.com" не предоставляет их для вызова API из HTML-кода? Потому что я могу вызвать этот же API из собственного кода Android. @epascarello
Почитайте про ту же политику происхождения ..... developer.mozilla.org/en-US/docs/Web/Security/…
У меня пока нет веб-сервера. У меня только одна HTML-страница. Итак, решения CORS реализуются в конфигурации сервера, что мне пока не нужно. @sideshowbarker
Решение CORS необходимо реализовать в конфигурации сервера https://api.upcitemdb.com/prod/trial/lookup. Поскольку вы не контролируете этот сервер, единственным вариантом будет сделать запрос через прокси-сервер. См. Раздел Как использовать прокси-сервер CORS, чтобы обойти проблемы «Нет заголовка Access-Control-Allow-Origin» ответа на stackoverflow.com/questions/43871637/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Классический!
Если вы откроете вкладку разработчика (f12), вы можете увидеть следующую ошибку:
Failed to load https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908: The 'Access-Control-Allow-Origin' header has a value 'https://www.upcitemdb.com'
Это означает, что сервер https://api.upcitemdb.com не хочет, чтобы вы использовали его ресурсы ни на каком веб-сайте, кроме «https://www.upcitemdb.com». Если вы не являетесь владельцем этого сайта, вы не можете загружать его ресурсы или должны попросить администратора предоставить вашему сайту авторизацию. Если он у вас есть, узнайте больше о конфигурации CORS.
Но тогда почему этот URL-адрес работает, если я нажимаю его в веб-браузере?
А если есть необходимость, я уже приобрел их премиум-план. Итак, у меня есть секретный ключ и клиентский ключ, которые я могу отправить в заголовке. Но дело даже в том, что это тоже не работает.
Хорошо, это вопрос безопасности: каждый может получить доступ к этому сайту с помощью браузера, но другие сайты не могут. Представьте, что страница google.com включает ваш скрипт, это заставит всех клиентов Google в мире попытаться подключиться к api.upcitemdb.com и DoS-серверу. Чтобы противостоять этому, сайт A может загружать ресурс с сайта B, только если сайт B сообщает в заголовке, что A авторизован.
Затем следует указать заголовок запроса в $ .ajax или через XHR. Этот пост может вам помочь: stackoverflow.com/questions/10093053/…
Если я передаю заголовки, я получаю сообщение об ошибке ниже: ERR_CERT_AUTHORITY_INVALID @Damien Gilles
ERR_CERT_AUTHORITY_INVALID означает, что вы, навигатор, думаете, что сертификат, используемый для https сервером, не заслуживает доверия. С вашей стороны делать нечего, вам следует связаться с api.upcitemdb.com.
Я заметил, что вы используете / prod / trial, возможно, вам стоит использовать / prod / v1, если вы больше не являетесь пользователем пробной версии
Когда я использую заголовки, я использую этот URL "api.upcitemdb.com/prod/v1/lookup".
У вас есть ошибка в консоли, чтобы поделиться?