|
|
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. Если в этот код передать заведомо недопустимый адрес (например " http://0.0.0.0"), то ошибка не перехватывается, а вместо этого исключение ERR_ADDRESS_INVALID выбрасывает браузер. Предполагаю, что из-за асинхронного режима, т.к. читал, что try/catch работает только в синхронном коде. А как перехватывать такие ошибки? Обработчик onerror у XMLHttpRequest задан, он срабатывает, но из него я не могу определить причину ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 14:51 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B. А как перехватывать такие ошибки? А стандартный вариант обработки не срабатывает? https://learn.javascript.ru/ajax-xmlhttprequest ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 07:33 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Стандартный это как? В синхронном режиме? В синхронном режиме try/catch работает нормально. В асинхронном режиме в момент выполнения send ошибок не происходит, однако спустя доли секунды браузер показывает в консоли исключение (после того как отработает onerror). То есть ошибку я поймать могу, но при этом исключение не перехватывается, а попадает уровнем выше (в браузер). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 08:58 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B. Стандартный это как? Там же и пример есть... Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:11 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B. В асинхронном режиме в момент выполнения send ошибок не происходит, однако спустя доли секунды браузер показывает в консоли исключение (после того как отработает onerror). Есть пример и для асинхронной обработке... Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:21 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Мне казалось, что я написал, в чем сложности. В асинхронном режиме у меня обработчики onerror (или onreadystatechange) и так работают. Но при этом в браузере (в консоли разработчика) все равно выбрасывается исключение, оно не перехватывается catch. Диаграмма получается следующая: 1) .open в асинхронном режиме 2) .send внутри try выполняется успешно, исключение не происходит 3) .onerror, в котором я получаю событие с типом error 4) в консоли браузера происходит исключение на строке с .send, и оно НЕ обрабатывается в catch Проблемы тут две. Во-первых, в onerror я не получаю информации об ошибке. Например для заведомо неверного URL выбрасывается исключение ERR_ADDRESS_INVALID, однако в обработчике этой информации нигде нет, об ошибке можно судить только по status=0. В синхронном режиме эта ошибка передается в catch (в переменной $err), но в onerror она не передается. Во-вторых, исключение не перехватывается, а попадает в браузер (несмотря на catch). Как его погасить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:52 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B. , кроме обработчика onreadystatechange в асинхронном вызове больше ничего нет... Как вариант, использовать setTimeout() и там запускать синхронный запрос с твоей обработкой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 12:22 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Я бы предпочел не использовать синхронные запросы. Хром (и не только) ругается, что они depricated. И возможно, что через какое-то время они вообще перестанут работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 12:46 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B. Я бы предпочел не использовать синхронные запросы. Значит выбор у тебя не велик... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 12:48 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
А может в Promise все это загнать. Он вроде должен все ошибки перехватывать. Типа этого Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 17:53 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Я сварщик ненастоящий. Концепцию promise пока понимаю не очень. Но в этом случае разве не лучше использовать fetch? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 18:19 |
|
||
|
Перехват ошибки в асинхронном XMLHttpRequest
|
|||
|---|---|---|---|
|
#18+
Alibek B., Я его и использую обычно. Но он не работает в ИЕ 11-. Если они не нужны, то конечно лучше. Он возвращает Promise и ошибки нормально ловятся через .catch (метод Promise, а не тот, который у try) ЗЫ А Promise у ИЕ 11- тоже нет. Но помнится, был полифил какой то. Я его использовал когда то, как раз с XMLHttpRequest, но на все возможные ошибки не тестировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 19:06 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=11&tid=1443521]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 365ms |

| 0 / 0 |
