Я делаю запрос API с помощью этого кода:
function httpGet(url){
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log(this.status)
if (this.readyState == 4 && this.status == 200) {
console.log("Got names")
getNamesFromJSONArray(request.responseText);
};
};
request.open("GET", url, true);
request.setRequestHeader("Authorization", "Basic (API key goes here)");
request.setRequestHeader("Accept-Encoding", "gzip");
request.send();
}
Это сработало только на днях, но теперь это терпит неудачу, сказав мне:
Не удалось загрузить ресурс: предварительный ответ не увенчался успехом
а также
XMLHttpRequest не может загрузить https://api.insight.ly/v2.1/contacts. Предполетный ответ не увенчался успехом
Кроме того, "Got names" никогда не печатается.
Почему этот код сломался, когда он работал только на днях? Это проблема на конце API или моей?
ОБНОВИТЬ! Я нашел это на веб-сайте api. Каким будет самый простой способ реализовать это? В настоящее время у меня нет бэкэнд и не нужно ни для чего кроме этого. Я понимаю, что проблема заключается в том, что они не хотят, чтобы мой API был в читаемом Javascript, что имеет смысл. Могу ли я войти в API по-другому, возможно, по электронной почте и паролю пользователя?
API должен иметь возможность (правильно) обрабатывать CORS, в частности, ваш вопрос касается предполета.
Перед выполнением фактического вызова CORS он попробует тот же вызов, используя метод OPTIONS, чтобы убедиться в его безопасности. Ожидается, что сервер вернет определенные заголовки.
Так что да, это на стороне API.
Вы можете прочитать дополнительную информацию об управлении доступом HTTP (CORS)