Когда не удается загрузить файл [script], как я могу узнать почему? - PullRequest
0 голосов
/ 11 июня 2010

Мое веб-приложение отправляет мне диагностическую информацию из javascript браузера, сообщая, что введенный мной тег [script] не смог загрузить связанный файл .js.Я не могу воспроизвести это локально, и нет никакого определенного шаблона, к которому файл терпит неудачу, или каков тип браузера.Существует географическое расположение запросов - Мексика и Бразилия всегда более часты - поэтому я предполагаю, что, возможно, Интернет в целом более ненадежен, и это просто проблемы сети, вызывающие сбои.

Хотелось бы знать наверняка.Есть ли способ определить из javascript браузера, произошел ли сбой из-за ошибки, возвращенной сервером, из-за сетевой ошибки или из-за тайм-аута протокола?Меня не волнует, является ли механизм специфичным для браузера, так как похоже, что одна и та же проблема вызывает ошибку во всех типах браузеров.

Ответы [ 3 ]

1 голос
/ 12 июня 2010

Прежде всего, как ветеран индустрии интернет-провайдеров, я могу сказать вам, что на юге США инфраструктура связи быстро ухудшается;просто учтите, что это в основном страны третьего мира с древними сетями дальней связи на основе меди.

ошибка, возвращаемая сервером

Используйте журналы сервера, чтобы обнаружить их!Вам не нужно спрашивать у клиента (браузера) что-то, на что вы уже должны знать ответ.

из-за сетевой ошибки или из-за тайм-аута протокола?

Поскольку сетевая ошибка довольно широка (например, тайм-аут протокола равен сетевая ошибка), я исправлю это, и нет, отладить их невозможно, если вы не используете AJAX.jQuery имеет jQuery.getScript () специально для этой задачи, но, скорее всего, он не даст вам необходимых вам опций, поэтому вам нужно взять их реализацию jQuery в качестве примера jQuery.ajax ().getScript () и затем реализуйте метод error (), где вы можете заглянуть в XHR, чтобы увидеть причину сбоя.Конечно, jQuery не требуется для всего этого, он просто делает это намного проще.

1 голос
/ 12 июня 2010

Я сомневаюсь: тег <script> может иметь событие onerror, как изображения, но я сомневаюсь, что вы получите от него какую-либо подробную информацию.

Единственное, что я знаю в JavaScript, который дает подробную информацию об ошибках, например, то, что вы ищете, это Ajax. В Ajax вы можете перехватывать тайм-ауты, а также коды ответов сервера.

Вы можете либо попытаться сделать Ajax-запрос к файлу сценария при сбое «нормального» включения, и проанализировать этот запрос на наличие ошибок. Однако я не совсем уверен, поможет ли это: может случиться так, что часть <script> выйдет из строя, но вызов Ajax загружается просто отлично из-за нечастой природы сбоев.

Второй вариант - и я не знаю, существует ли стабильная реализация для этого - фактически загружает скрипт с использованием Ajax и внедряет его в документ. Я уверен, что некоторые больной творческий ум уже где-то баловался этим :) Это даст вам возможность проанализировать любые сбои (например, сделать еще один вызов Ajax, отправив диагностическую информацию).

Не в последнюю очередь, посмотрите на журналы ошибок вашего сервера для любых необычных случаев.

0 голосов
/ 12 июня 2010

Тег <script> имеет onerror, но, как сказал ранее Пекка, он может не дать никаких полезных отзывов.Вот фрагмент кода на тот случай, если вы захотите изучить его дальше:

var url = 'test.js';
document.write('<script src="'+url+'" type="text/javascript" charset="utf-8" onerror="throw(\'An error occured: \' + this.src)"><\/script>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...