Javascript.RU

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

Как я должен обрабатывать ответ, если может прилететь ошибка?
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. Хочу услышать ваше мнение: как бы эту проблему решил нормальный разработчик?
Ответить с цитированием
  #2 (permalink)  
Старый 19.10.2022, 08:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

accountnujen, любая обработка которая не вылетает по ошибке и не крашит программу - уже рабочая обработка.
Основные моменты:
- отработать штатные ситуации успеха и не успеха
- сообщить о нештатных

Потом можно проанализировать не штатные ситуации, которые возникали, и часть (может и все) перевести в разряд штатных...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать какой скрипт вызывается при клике по эленету (если это прямо не прописано) Dmitriy Komar Events/DOM/Window 4 08.12.2011 17:21
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
способы организации кода melky Общие вопросы Javascript 17 01.10.2011 22:57
Если селектор возвращает массив узлов, как работать с каждым по отдельности? балерун jQuery 7 15.02.2011 12:42
Сторонние библиотеки - быть или не быть? IIIEPJIOK Оффтопик 64 21.03.2009 19:39