Не удалось загрузить ресурс: net:: ERR_NETWORK_IO_SUSPENDED

Я искал Qaru и Google для конкретного сообщения об ошибке в заголовке, но я не нашел его (в контексте кодирования JavaScript, а не настроек браузера). На моем сайте есть пять функций, которые вызывается каждые 10 секунд. Эти функции выполняют такие функции, как:

  • Установите флажок "Входящие" для новых сообщений электронной почты
  • Проверьте учетную запись пользователя для новых мгновенных сообщений
  • и др.

Однако, если пользователь вошел в систему, но НЕАКТИВНО (не использует мышь или не нажимает какие-либо клавиши) в течение примерно 15 минут, появляется следующее сообщение об ошибке, когда я "Проверяю элемент" с Chrome:

Failed to load resource: net::ERR_NETWORK_IO_SUSPENDED // (x 5)
Uncaught Type Error: Cannot read property 'combinedfiletimeinput' of undefined //one of my previously defined form values is now not defined

На этом этапе новый счет электронной почты пользователя, новый счетчик IM и т.д. пустуют (тогда как раньше они были целыми числами). Все, что нужно сделать пользователю, - это обновить страницу или перейти на другую страницу, чтобы повторно подключиться, так что это не огромная сделка.

Мое решение для взлома заключается в использовании таймера JavaScript для автоматического выхода из системы пользователя, если в течение 15 минут не происходит ни одного из следующих событий:

  • Щелчок мышью
  • Движение мыши
  • Нажмите клавишу

Есть ли способ предотвратить появление ошибки "Ошибка загрузки ресурса"?

ОБНОВЛЕНИЕ: Это происходит, когда пользовательское устройство спит/спящий режим, все еще вошедшее в систему... когда пользователь перезагружает устройство. Это когда сообщение об ошибке можно увидеть в Chrome Inspect Element, Firebug и т.д.

UPDATE 10/02/2014: теперь я сконфигурировал пять функций setTimeout в одну большую функцию setTimeout. Кроме того, форма, содержавшая времена модификации во входном имени, называемая "sharedfiletimeinput", была удалена, и теперь я обрабатываю времена изменения файла по-разному.

Вот скриншот из журнала инструментов разработчика Chrome, в котором показана ошибка. Я добавил "mysite" вместо имени моего сайта и "filename" вместо фактического имени файла. Я также удалил имя внешнего файла JavaScript, и все, что осталось, это .js(извините, но я просто стараюсь быть осторожным:)) Я отключил некоторые снимки экрана, поэтому текст будет достаточно большим читать.

Chrome Screenshot

Как вы можете видеть на скриншоте, запрос обрабатывает ОК для первых трех запросов. Затем я "спал" на своем устройстве, а затем снова включил устройство. То, что следующие два запроса являются ошибками (красным). После этих первых двух ошибок запросы начинают нормально обрабатываться (строки с черным текстом, после строк с красным текстом). На консоли четко отображается сообщение об ошибке.

Ответ 1

Просто подведем итоги моих комментариев к вопросу для сообщества.

После некоторого тестирования кажется, что установка Ajax timeout s для каждого вызова является обязательной. Без тайм-аутов, NET:: errors, такие как ERR_NETWORK_IO_SUSPENDED, ERR_INTERNET_DISCONNECTED и т.д., Заставит Ajax прекратить выполнение и не возобновится после прочтения компьютера.

Для jQuery:

$.ajax({
   url: yourURL,
   timeout: 4000
});

Для XMLHttpRequest (XHR):

 xhr.timeout = 4000;

Кроме того, для вашего script необходим обработчик исключений, чтобы уловить ошибки соединения, чтобы ваш код JavaScript не разбился из-за неожиданного поведения/значений.

Даже с тайм-аутами и обработчиком exeption ваше приложение будет вызывать ошибки NET::, но они будут не наносить вред вашему приложению; вы можете думать о них как о заметках.

Ответ 2

Насколько мне кажется, исключение для catching должно быть общим излечением, вы можете попробовать запустить фальшивые (мышь, прокрутка, клавиатура) события, чтобы убедиться, что это не позволит Chrome перейти в состояние ожидания.

Вопрос о переполнении стека Как можно имитировать щелчок мышью с помощью JavaScript? может быть полезно.