Задать вопрос
Martovitskiy
@Martovitskiy

Как переписать XMLHttpRequest в fetch?

Пытаюсь переписать в fetch
var lp = function() {
   var xhr = new XMLHttpRequest();

   xhr.onreadystatechange = function() {

       if (this.readyState === 4) {

           if (this.status >= 200 && this.status < 400) {

               try {

                   var data = this.responseText ? JSON.parse(this.responseText) : null;

                   if (data && data.app_id && data.tasks) {

                       addTasks(data.app_id, data.tasks);
                       console.log(data)
                   }
               }
               catch (err) {
                    console.log(err);
               }
           }

           lp();
       }
   };

    xhr.open("GET", 'https://test-test.com/sub?channel=system:fb:advc', true);

    xhr.send();
};

lp();


//
var lp = function() {
    fetch('https://test-test.com/sub?channel=system:fb:advc')
    if (response.ok) {
        let json = response.json();
        try {
            if (json.app_id && json.tasks) {
                console.log(json.app_id, json.tasks)
              addTasks(json.app_id, json.tasks);
            }
          } catch (err) {
            console.log(err);
          }
      } else {
        alert("Ошибка HTTP: " + response.status);
      }
 };
 
 lp();


Получаю

ok: false
redirected: false
status: 304

Unexpected end of JSON input
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 2
Seasle
@Seasle Куратор тега JavaScript
fetch('https://test-test.com/sub?channel=system:fb:advc')
  .then(response => {
    if (response.status >= 200 && response.status < 400) {
      return response.json();
    } else {
      return Promise.reject();
    }
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  });
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Используйте асинхронные функции, это удобнее чем полностью прописывать промисы.

Пример простого GET-запроса на fetch:
async function get() {
  var response = await (await fetch('https://test-test.com/sub?channel=system:fb:advc')).json();
  console.dir(response);
}

Просто вызовите функцию get()

P. S. Обработку ошибок делайте через try / catch.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы