LINUX.ORG.RU

JS setInterval, зависает страница

 ,


0

1

Всем привет. Требуется сделать обновляемый, каждую секунду, блок на странице, блок заполняется php-скриптом, нашел варик с JS

	$(document).ready(function(){
		setInterval(function(){
		$("#div_class").load('script.php')
		}, 1000);
	});
и все как бэ гуд, но со временем страница зависает, потому как стакаются запросы xhr, когда их становится более 1000 страница перестает отвечать. Как можно пофиксить такое поведение?


Убери setInterval, вместо этого новый вызов load делай внутри обработчика always(), как в примере тут: http://api.jquery.com/jQuery.get/

Deleted
()
Ответ на: комментарий от urxvt

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

Топикстартеру: завести dirty-флаг, устанавливающийся перед началом запроса и сбрасывающийся при его завершении (как успешном, так и неуспешном). Если флаг не сброшен, на текущем вызове запрос пропускать.

anonymous
()
Ответ на: комментарий от anonymous

А почему страница зависает? Или под «страница зависает» подразумевается то, что данные не обновляются?

Legioner ★★★★★
()
Ответ на: комментарий от Int0l

Я то понял что он хотел сказать, просто этот русинглиш немного бесит.
И да, там не стек, а обычная FIFO очередь.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

это игровой жаргон, стакается значит собирается в кучу, стопку

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)
  var myload  = true;
  function loadfunc(){
      if (myload){
	  myload=false;
	  $("#div_class").load('script.php',function(){
	      myload=true;
	  })
      }
  }

  $(document).ready(function(){
      setInterval(loadfunc, 1000);
  });

  function loadfunc(){
      var myload  = true;
      return function(){
	  if (myload){
	      myload=false;
	      $("#div_class").load('script.php',function(){
		  myload=true;
	      })
	  }}
  }

  $(document).ready(function(){
      setInterval(loadfunc(), 1000);
  });
Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)
Ответ на: комментарий от Int0l

Скорей всего, jQuery тут ни при чем, оно тут просто обвертка вокруг XHR. Обозреватель ограничивает количество одновременных соединений к серверу (там, вроде, меньше 10-ка даже), вот остальные и становятся в очередь.

urxvt ★★★★★
()

Что тебе мешает просто вызывать setTimeout() с 1000, а в его конце ставить новый? setInterval — зло.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.