Показать сообщение отдельно
  #1 (permalink)  
Старый 08.12.2021, 20:22
Аспирант
Отправить личное сообщение для developer_ Посмотреть профиль Найти все сообщения от developer_
 
Регистрация: 28.07.2011
Сообщений: 40

XMLHttpRequest как отправить ответ не дожидаясь приёма всех данных
Суть такова. Передаю файл на сервер. На сервере стоит ограничения на размер принимаемых файлов. Доступ к серверу у меня полный. Т.е. ответы я сам формирую - и поэтому могу сделать поведения сервера абсолютно любым.

Так вот. Я принимаю первый пакет данных. Выделяю заголовок и и ищу длину тела. Если длина тела больше разрешённой, то сразу отправляю ответ.

Провёл сотню экспериментов. Даже извращался с длиной принятых данных. Перед тем как ответ отослать.

Поведение браузера всегда одинаково - если я присылаю любой ответ до того как все данные были переданы то я получаю:
событие onreadystatechange
xhr.readyState = 4
xhr.status == 0
xhr.responseText - всегда пусто

Как по мне это какое то тупое поведение.

Я выставлял всевозможные статусы ответа вплоть до экзотических 413. Но xhr.status всегда 0.

Текст всегда xhr.responseText пустой - что бы я не отправлял.

Такое ощущение что браузер тупо по эксепшену вылетает - и даже не пытается обработать код ответа.

Я же хочу прислать сообщение что файл большой - и это сообщение отобразить пользователю.

Кто как решает подобную проблему?

Пока что напрашивается тупой метод - сохранить в сессии код ошибки и запрашивать его отдельным запросом. Но мне этот подход жутко не нравится.
Ответить с цитированием