@accountnujen

Как я должен обрабатывать ответ, если может прилететь ошибка?

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. Хочу услышать ваше мнение: как бы эту проблему решил нормальный разработчик?
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
TpyxJl9l
@TpyxJl9l
FullStack .NET Core developer
Я конечно не PHP разработчик, тестировал на asp.net core. Суть в том, что если происходит ошибка на стороне сервера, мы ее обрабатываем и кидаем исключение в консоль.

Что касается проверки JSON это можно определить по заголовкам в ответе.

Вам необходимо доработать этот код под ваши потребности и форму.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы