Вопрос:

Статус XHR не определен

javascript xmlhttprequest cors

812 просмотра

1 ответ

493 Репутация автора

Я пытаюсь отправить запрос XHR в REST API, но не могу получить ответ.

Вот мой код:

<script>
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://www.mocky.io/v2/5a083d8e2f0000c61ee61140", true);
  xhr.setRequestHeader("Content-type", "application/json");
  xhr.onreadystatechange = function() {
    console.log("xhr.readyState: " + xhr.readyState);

    if (xhr.readyState === XMLHttpRequest.DONE) {
      console.log("xhr.status: " + xhr.status);

      if (xhr.status === 200) {
        console.log("xhr.responseText: " + xhr.responseText);

        var response = JSON.parse(xhr.responseText);
      }
    }
  }
  xhr.send();
  console.log("xhr.readyState: " + xhr.readyState);
  console.log("xhr.status: " + xhr.status);
</script>

Когда я его выполняю, он xhr.statusостается неопределенным и никогда не входит в if (xhr.status === 200). Я не знаю почему. Кто-нибудь может мне помочь?

Редактировать:

Я исправил JSON, но у меня все еще есть ошибка:

Консоль Google Chrome показывает ошибку.

Ошибка о Access-Control-Allow-Origin:

Не удалось загрузить http://www.mocky.io/v2/5a083d8e2f0000c61ee61140 : Ответ на предварительный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Происхождение 'null', следовательно, не разрешено. Ответ имел HTTP-код состояния 403.

Итак, я прочитал эту тему, в которой говорится, что мне нужно добавить Access-Control-Allow-Origin : *в заголовок HTTP на mocky.io . Я делаю это, но это ничего не меняет:

введите описание изображения здесь

Вот новый URL mocky.io :

http://www.mocky.io/v2/5a083d8e2f0000c61ee61140

Кто-нибудь видит, где моя ошибка?

Автор: Armand Delessert Источник Размещён: 08.11.2017 11:48

Ответы (1)


0 плюса

493 Репутация автора

Решение

Итак, кажется, что Access-Control-Allow-Origin : *игнорируется, когда мы получаем доступ к HTML-файлу локально (из file:///C:/.../index.html).

Чтобы это работало, нам нужно смонтировать локальный сервер (например, с этим расширением Chrome ) и получить доступ к HTML-файлу через HTTP ( http://127.0.0.1:8887/index.html).

Или используйте это другое расширение Chrome, которое автоматически добавляется Access-Control-Allow-Origin : *в заголовок ответа HTTP.

Автор: Armand Delessert Размещён: 10.11.2017 02:59
Вопросы из категории :
32x32