Показать сообщение отдельно
  #1 (permalink)  
Старый 19.10.2022, 05:37
Интересующийся
Отправить личное сообщение для accountnujen Посмотреть профиль Найти все сообщения от accountnujen
 
Регистрация: 23.01.2022
Сообщений: 18

Как я должен обрабатывать ответ, если может прилететь ошибка?
fetch запрос на сервер. В случае успеха или в случае предвиденной неудачи - возвращается json объект с подробностями. Ответ так же может быть непредвиденный. Один из вариантов - когда пользователь отправляет файл большого размера и сервер выкидывает ошибку на 0 строке. Это фиксится клиентской валидацией, но есть ощущение, что могут быть и другие непредвиденные ошибки. Вот хотелось бы хоть как-нибудь их обработать.

Проблема в том, что мой скрипт ожидает json, так как я делал response.json(), однако, так как может придти не json, то я сделал вот такой костыль:
function returnjson(str) {
    try {
    	let e = JSON.parse(str);
    	if (e && !!str) return e
    } catch (e) {
        return str;
    }
}
document.querySelector("#form").onsubmit = (e) => {
  e.preventDefault();
  fetch("send.php", {method: 'POST',body: new FormData(e.target)})
  .then(response => {
    if (response.status >= 200 && response.status < 300) return response.text();
    else throw (response.text());
  }).then(data => { 
    let json = returnjson(data);
    console.log(json);
    if(json.result) {
      if (json.result === "success") { 
        alert("Успех");
      } else 
      if (json.result === "error") { 
        alert(json.info);
      }
    } else {
      alert('Вернулся не JSON. Смотри консоль');
    }
  }).catch(error => {
    console.log(error);
    alert("Ошибка при обращении к серверу");
  })
}

Смысл в том, что в начале я проверяю доступность сервера и в случае нормального кода ответа получаю текст, а потом уже проверяю, является ли этот текст json. Хочу услышать ваше мнение: как бы эту проблему решил нормальный разработчик?
Ответить с цитированием