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
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.