Kompletní zachycení AJAX chyb v JavaScriptu

Promise, který vrací fetch, je dokončen s chybou pouze tehdy, pokud nastala chyba sítě. Pokud server vrátí odpověď se statusem 404 nebo 500, tak bude promise úspěšně dokončen, ale status ok bude nastaven na false.

Pojďme zachytit oba typy chyb:

javascriptbutton.addEventListener('click', function() {
  let promise = fetch('/ajax.html')
  .then(
    response => {
      if (response.ok) {
        return response.text();
      } else {
        console.log('špatný status odpovědi');
        return '';
      }
    },
  ).then(
    text => {
      console.log(text);
    }
  ).catch(
    error => {
      console.log(error);
    }
  );
});

Uděláme to tak, aby chyba, spojená se špatným statusem HTTP odpovědi, byla také zachycena blokem catch. K tomu ji pošleme dál pomocí throw:

javascriptbutton.addEventListener('click', function() {
  let promise = fetch('/ajax.html')
  .then(
    response => {
      if (response.ok) {
        return response.text();
      } else {
        throw new Error('špatný status odpovědi');
      }
    },
  ).then(
    text => {
      console.log(text);
    }
  ).catch(
    error => {
      console.log(error);
    }
  );
});
Задание 1

Vypište text stránky, pokud byl požadavek úspěšný, a chybu, pokud se něco pokazilo.