JQuery установить интервал проблемы - PullRequest
1 голос
/ 11 декабря 2010

Я создаю чат-систему, похожую на Facebook, чтобы пользователи моей системы могли общаться друг с другом. По какой-то причине, когда я запускаю этот интервал для проверки новых чатов, он отлично работает в Firefox, но не в Internet Explorer. Есть ли что-то конкретное в setInterval, которое не нравится Internet Explorer?

Редактировать: Конкретная проблема, с которой я сталкиваюсь в IE, заключается в том, что вместо загрузки новых чатов через этот setInterval ничего не происходит. Он отлично работает в Firefox и загружает новые чаты по мере их ввода в базу данных. Я не уверен, какая часть этого кода может вызывать ошибку, но у меня есть подозрение, что это функция setInterval.

Или может быть частота запросов Ajax?

  setInterval(function(){ 
      // Load Chats
     },500);

На стороне Примечание: На каждом интервале у меня есть ajax-запрос, загружающий PHP-файл, который запрашивает базу данных, чтобы увидеть, есть ли какие-либо новые чаты, добавленные в базу данных после загрузки страницы. Если это так, то он устанавливает новое окно чата для этого сеанса чата. Неправильно ли продолжать запрашивать базу данных и выполнять многоадресные Ajax-запросы? Есть ли лучший способ?

Это упрощенная версия того, что я делаю:

setInterval(function(){
   // Get new DB Entries 
   $.get(url, data,handlerFunction); 

   function handlerFunction(result){
   // Load new chats if they exist in the DB 
   } 
 },500);

Ответы [ 2 ]

3 голосов
/ 11 декабря 2010

Есть ли что-то конкретное в setInterval, которое не нравится Internet Explorer?

Нет, нет.

Или может быть частотазапросов Ajax?

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

1 голос
/ 11 декабря 2010

На данный момент могу сказать одно: в тех случаях, когда ваши "ajax звонки с таймерами" я избегаю использовать setInterval и вместо этого использую setTimeout.

Потому что, например, int=self.setInterval("clock()",1000); Это немедленно вызовет функцию часов и будет вызывать ее каждую секунду, независимо от того, сколько времени может потребоваться clock().

С другой стороны, var t=setTimeout("clock()",1000); Это будет ждать одну секунду, затем начнет вызывать функцию clock(), а если вы снова вызвали settimeout, она будет ждать до завершения выполнения clock() и вызовет ее снова.

Некоторые полезные ссылки по этому поводу:
http://www.w3schools.com/jsref/met_win_setinterval.asp
http://www.w3schools.com/js/js_timing.asp
http://zetafleet.com/blog/why-i-consider-setinterval-harmful
http://javascript.about.com/library/blstvsi.htm

...