2013-05-26 2 views
0

Я работаю над проектом, в котором я использую setInterval. Я немного почитал об этом, но я не могу это понять. Что происходит, это хорошо работает, но примерно через 20 секунд он начинает становиться все быстрее и быстрее, пока он не выдержит мой компьютер.setInterval JavaScript не работает

var autorefresh = setInterval(function() { 
    $('#holder').fadeOut('slow').load('index.php').fadeIn('slow'); 
}, 5000); 

Как я уже говорил, это прекрасно работает, пока оно не начнет постепенно увеличиваться и ускоряться.

+0

Вы знаете, что 'load' не помещается в очередь' fx', но выполняется немедленно? – Bergi

ответ

7

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

РЕДАКТ. Апелляционный совет хотел бы «обновить div каждые 5 секунд».

Причина, по которой это не работает, потому что обновление не мгновенное, требуется время. Но цикл не уважает и освежает все 5 секунд независимо от того, сколько времени занимает загрузка. Это означает, что в любой момент сеть может отвечать одним из запросов ajax и fadeIn, и вы можете сразу запустить два fadeIn s.

Чтобы исправить это, мы подождем, пока ajax load и fadeIn не завершили установку timeOut для другого запроса.

var refresh = function() { 
    $('#holder').fadeOut('slow').load('index.php').fadeIn("slow", 
     function(){setTimeout(refresh,5000)}); 
} 
refresh(); 
+0

ОК, так как я могу это исправить? – user1926053

+0

Что вы пытаетесь сделать? – Joe

+0

Не могли бы вы дать нам некоторый контекст относительно того, что вы хотите выполнить с этой частью кода? – alexpls

Смежные вопросы