Как я должен обрабатывать ответ, если может прилететь ошибка?
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. Хочу услышать ваше мнение: как бы эту проблему решил нормальный разработчик? |
accountnujen, любая обработка которая не вылетает по ошибке и не крашит программу - уже рабочая обработка. ;)
Основные моменты: - отработать штатные ситуации успеха и не успеха - сообщить о нештатных Потом можно проанализировать не штатные ситуации, которые возникали, и часть (может и все) перевести в разряд штатных... |
Часовой пояс GMT +3, время: 13:09. |