JQUERY или JS есть способ обнаружить в любое время, когда окно загружается? В основном любая сетевая активность? - PullRequest
4 голосов
/ 14 апреля 2010

Есть ли способ с JQUERY или Javascript, чтобы обнаруживать каждый раз, когда окно браузера загружает что-то, делает ajax-вызов, загружает изображение и т. Д ... В основном любая сетевая активность?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2010

Что-то вроде этого jQuery (помещенного в ГОЛОВУ) должно работать.

var loading = true;

$(window).load(function () {
   loading = false;
}).ajaxStart(function () {
   loading = true;
}).ajaxComplete(function () {
   loading = false;
});

Подробнее о ajaxStart читайте.

2 голосов
/ 14 апреля 2010

Мой ответ ниже и ответы предыдущих пользователей только пытаются проверить, выполняет ли браузер запрос XmlHttpRequest (т.е. ajaxy). Вы спросили, можете ли вы сказать, выполняет ли браузер какой-либо сетевой запрос (то есть загрузка изображений / CSS или, возможно, длительный запрос кометы). Я не знаю ни одного javascript API, который бы сказал вам об этом - они могут существовать, но я подозреваю, что если они это сделают, они будут зависеть от браузера [если кто-то знает ответ на этот вопрос, пожалуйста, включите его]. Очевидно, что такие инструменты, как Firebug и dynaTrace, могут обнаруживать сетевую активность, но я думаю, что эти инструменты «подключаются» к браузеру намного глубже, чем код JavaScript.

Сказав все это, если вы хотите посчитать XHR, порожденные jQuery, тогда ответ dave1010 кажется хорошим.

Однако я думаю, что это склонно к некоторым проблемам с расой: -

По документам (http://api.jquery.com/ajaxStart/)

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

Так что, если долго запущенный XHR был запущен, а другой был запущен до того, как первый завершился, обработчик ajaxStart вызывался только один раз. Второй XHR может завершиться раньше первого и установить loading = false, хотя первый запрос все еще выполняется.

Глядя на источник jQuery 1.4, кажется, это подтверждает. Интересно, что jQuery 1.4 имеет количество активных XHR (jQuery.active), но это не упоминается в документации, поэтому, вероятно, лучше не использовать его (что очень жаль, потому что это немного облегчит жизнь).

См. http://gist.github.com/277432#LID5052 для кода, который проверяет, что $ .active равен 0, прежде чем вызывать обработчики ajaxStart.

[Я думаю]. Глобальные обработчики событий 'ajaxSend' вызываются перед каждым XHR. Использование этого параметра вместо «ajaxStart» должно помочь, но нам все равно нужно будет вести подсчет активных запросов, в отличие от простого флага «загрузки».

Может быть, что-то вроде следующего будет работать?

var activeXhrCount = 0;
$(document).ajaxSend(function() {activeXhrCount++;}).ajaxComplete(function(){activeXhrCount--;});

Имейте в виду, что это даст неправильные ответы, если какой-либо код вызывает $ .ajax с глобальным параметром, установленным в false, и поэтому вряд ли является пуленепробиваемым;

Также имейте в виду, что activeXhrCount учитывает только XHR, порожденные jQuery - те из других библиотек, которые вы можете использовать, не будут учитываться.

1 голос
/ 14 апреля 2010

я думаю, что ты сам должен думать, я делал что-то подобное раньше [например, когда gmail показывает загрузку сверху]

идея состоит в том, чтобы создать массив, затем добавить / удалить из него и продолжать проверять его на предмет наличия открытого соединения

код должен выглядеть следующим образом

var liveAjax = [];

//making ajax call
liveAjax[liveAjax.length] = true;
$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    liveAjax[liveAjax.length] = false;
    or delete liveAjax[liveAjax.length]
  }
});


then checking the alive calls by
setInterval(function(){
//looping in liveAjax  and check if there any true value, then there is ajax call elese nothing happens
},200);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...