var newstimer = window.setInterval('news();', 15000);
нужно вызывать один раз setTimeout(news, 15000);
Вы хоть понимаете, что после первого отложенного вызова news() через 15 секунд эта функция будет вызвана 2 раза, после следующих 15 секунд 4 раза, и так далее в геометрической прогрессии 2n?
Вижу, вы просто не понимаете... Ещё раз на пальцах — вы постоянно вызываете функцию news. Или вы внутри неё создаёте отложенный вызов с помощью setTimeout, или вне этой функции запускаете генерацию отложенных функций с помощью setInterval.
Но, если вы в теле функции каждый раз вызываете setInterval, вы получаете через 15 секунд удвоенное количество вызовов. То есть, через 60 секунд вы получите 8 вызовов в одно и то же время. А через 2 минуты запустится 128 вызовов news. Вы этого хотите?)
Я вообще не понимаю вашей логики. Если у вас есть потребность в постоянных запросах, то, во-первых, стоит посмотреть в сторону WebSockets. Во-вторых, если всё-таки AJAX, то после получения ответа вызывать setTimeout для этой же функции.
Не нужно вам никаких setInterval, ну а то, что вы с ними делаете, не укладывается в моё понимание...
Я в document ready оборачиваю и у меня эту функцию не видно. Думаю, что у автора тоже функция в document ready находится. Хотя конечно не могу быть уверен в этом на 100%)
Я тоже не уверен — ведь с ошибкой ubderfiend я не сталкивался никогда) Однако, функция news() может быть в глобальном контексте — скрипт в конце body после формы и ждать построения DOM Не нужно, функция news() вызывается вручную (тем же кликом etc.) и также стоит просто в глобальном контексте.
Ну и я не вижу необходимости формировать анонимную функцию, если можно передать ссылку на news.
Александр Крупнов: Просто у меня несколько AJAX функций на странице и чтобы они не перебивали друг друга из-за интервала я решил сперва очистить все интервалы и задавать каждому свой
...for(var i = 1; i < 1000; i++) {window.clearInterval(i);}
var newstimer = window.setInterval('news();', 15000); .....
...for(var i = 1; i < 1000; i++) {window.clearInterval(i);}
var newstimer = window.setInterval('my();', 15000); .....
Александр Крупнов: не совсем понял. Ситуация такая:один запрос выводит в div#content информацию по всем заказам, другой выводит в этот же див только сегодняшние заказы и т.д.
paulvales: Так разделите все по элементам - в одним html элементах все заказы, в других только за сегодня и обновляйте все отдельными запросами. Но! Наверное вообще все лучше сделать на стороне сервера, чтобы одним запросом получать сразу всю информацию)
Александр Крупнов: С учётом того, что по истечению интервала времени будет запущен асихронный вызов, то использование setInterval вообще не нужно. Получили, запустили отложенный вызов. Получили, запустили...