<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<div id="include"></div>
<script type="text/javascript">
function sync()
{
$.ajax({
type: 'POST',
dataType: 'json',
url: 'sync.php',
success: function(jsondata){
ar_ids = jsondata;
}
});
}
function contentUpdate(n)
{
if (i==ar_ids.length){i=0};
$("#include").load(
"content.php",
{
ID: n
}
);
}
var i=0;
sync();
contentUpdate(i);
setInterval(function(){sync();}, 60000);
setInterval(function(){contentUpdate(++i);}, 5000);
</script>
День добрый. есть вот такой код^
В setInterval(function(){contentUpdate(++i);}, 5000) надо вместо 5000 подставлять значения из массива ar_ids. Будет ли нормально работать функция setInterval, т.е. менять задержку не с постоянным заданным интервалом, а с динамически меняющимся? Могу ли Я просто подставить вместо 5000 что-то типа ar_ids[i]?
Спустя 34 минуты, 52 секунды (9.08.2012 - 13:28) eaborodkin написал(а):
вот частичное решение проблемы http://javascript.ru/forum/events/27365-ne...etinterval.html но как тогда сделать с setTimeout? Насколько знаю с ним много проблем, если его использовать в таком ключе...
Спустя 53 минуты, 3 секунды (9.08.2012 - 14:21) alexbel2404 написал(а):
это не частичное, а полное решение) Там все верно написано. Меняй на setTimeout и прогоняй ar_ids через цикл.
Спустя 4 минуты, 25 секунд (9.08.2012 - 14:25) eaborodkin написал(а):
а не получится вот такой ситуации с setTimeout()? http://ir2.ru/setinterval.aspx
Спустя 20 минут, 30 секунд (9.08.2012 - 14:46) alexbel2404 написал(а):
function sleep(numberMillis){
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true){
now = new Date();
if (now.getTime() > exitTime) return;
}
}
а если такую ф-ию юзать? в конце тела цикла ставить sleep(тут_число_в_милисекундах_их_массива_ar_ids);
Спустя 9 минут, 57 секунд (9.08.2012 - 14:55) eaborodkin написал(а):
прикольно) типа самодельный счётчик?))
Попробую...
Вопрос: (true) это костыль в данном случае?
P.s. Почему разработчики js не внесут штатную функцию по типу этой sleep()?
Попробую...
Вопрос: (true) это костыль в данном случае?
P.s. Почему разработчики js не внесут штатную функцию по типу этой sleep()?
Спустя 47 секунд (9.08.2012 - 14:56) Игорь_Vasinsky написал(а):
нет. это значит не останавливаться, типа 1==1
Спустя 1 минута, 51 секунда (9.08.2012 - 14:58) eaborodkin написал(а):
ну, Я это и имел ввиду)
Спустя 19 часов, 20 минут, 42 секунды (10.08.2012 - 10:19) eaborodkin написал(а):
alexbel2404
Спасибо, за функцию, помогла очень.(лайк поставить пока не могу, т.к. новичок)
Короче, подточил свой скрипт
он работает, но только когда есть вот этот alert(1). Если его нет, то не работает, а в FireBug пишет
Я так понял, что когда нет alert, то он не успевает определить переменную ar_ids. Видимо sync.php ещё не вернул ответ, а js уже побежал вперёд... Но это мои догадки...
В чём трабла? С остановкой на alert(1) работает, без неё нет.
Спасибо, за функцию, помогла очень.(лайк поставить пока не могу, т.к. новичок)
Короче, подточил свой скрипт
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<div id="include"></div>
<script type="text/javascript">
var i=0;
var ar_ids;
var id;
var delaytime;
var len;
function sync()
{
$.ajax({
type: 'POST',
dataType: 'json',
url: 'sync.php',
success: function(jsondata)
{
ar_ids = jsondata;
len = ar_ids.length;
}
});
};
function contentUpdate(){ alert(1);
if(i==len){i=0;};
id=ar_ids[i];
$("#include").load(
"content.php",
{
ID: id['ID']
}
);
i++;
};
function sleep(numberMillis){
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true){
now = new Date();
if (now.getTime() > exitTime) return
}
}
function contUp(){
contentUpdate();
if(id['PROPERTY_TIME_M_VALUE']==null) {id['PROPERTY_TIME_M_VALUE']=0;};
if(id['PROPERTY_TIME_S_VALUE']==null) {id['PROPERTY_TIME_S_VALUE']=10;};
delaytime=(id['PROPERTY_TIME_M_VALUE']*60+id['PROPERTY_TIME_S_VALUE'])*1000;
sleep(delaytime);
};
sync();
contentUpdate();
setInterval(function(){sync()}, 60000);
while (true) {
contUp();
}
</script>
он работает, но только когда есть вот этот alert(1). Если его нет, то не работает, а в FireBug пишет
ar_ids is undefined
contentUpdate()
id=ar_ids[i];
Я так понял, что когда нет alert, то он не успевает определить переменную ar_ids. Видимо sync.php ещё не вернул ответ, а js уже побежал вперёд... Но это мои догадки...
В чём трабла? С остановкой на alert(1) работает, без неё нет.
Спустя 51 минута, 55 секунд (10.08.2012 - 11:11) eaborodkin написал(а):
И, кстати, с alert(1) начинает пахать только в FF.
Спустя 12 минут, 19 секунд (10.08.2012 - 11:23) killer8080 написал(а):
eaborodkin
а нафига вообще нужны эти пляски с бубном? Не проще контент выводить сразу, после получения?
а нафига вообще нужны эти пляски с бубном? Не проще контент выводить сразу, после получения?
Спустя 5 минут, 49 секунд (10.08.2012 - 11:29) eaborodkin написал(а):
в success? а что-то изменится?
дело в том, что sync() у меня всего лишь синхронизирует информацию с базой данных раз в 60 сек. Получается, что она у меня работает асинхронно с выводом #content. Получается, что мне впринципе не надо привязываться к success.
дело в том, что sync() у меня всего лишь синхронизирует информацию с базой данных раз в 60 сек. Получается, что она у меня работает асинхронно с выводом #content. Получается, что мне впринципе не надо привязываться к success.
Спустя 4 часа, 13 минут, 57 секунд (10.08.2012 - 15:43) eaborodkin написал(а):
поможите, плиз)
Спустя 48 минут, 17 секунд (10.08.2012 - 16:31) killer8080 написал(а):
Цитата (eaborodkin @ 10.08.2012 - 16:43) |
поможите, плиз) |
трудно помочь, не понимая сути задачи. Ты пытаешься сделать динамическую подгрузку новостей? Или что? Зачем нужно менять таймаут?
Спустя 2 дня, 16 часов, 20 минут, 19 секунд (13.08.2012 - 08:51) eaborodkin написал(а):
надо сделать что-то типа рекламной доски, где на экране объявление будет отображаться определённое время.
Спустя 3 минуты, 18 секунд (13.08.2012 - 08:55) killer8080 написал(а):
Цитата (eaborodkin @ 13.08.2012 - 09:51) |
где на экране объявление будет отображаться определённое время |
Объявление будет одно? Или несколько?
Спустя 39 минут, 18 секунд (13.08.2012 - 09:34) eaborodkin написал(а):
сами объявления у меня в битриксе, есть страничка с инфоблоком, это как раз content.php который по переданному ID отображает нужный элемент. Список отображаемых элементов получаю в sync.php с помощью метода битрикса и возвращаю json'ом. Таким образом произвожу синхронизацию списка с сервером, т.е. если в какой-то момент будет добавлено новое объявление, то после синхронизации оно тоже начнёт отображаться на доске объявлений. У каждого элемента задаётся отдельное свойство с временем отображения.
Спустя 3 минуты, 35 секунд (13.08.2012 - 09:38) eaborodkin написал(а):
ну конечно несколько, Я ж целый массив получаю с помощью sync.php
Спустя 5 часов, 21 минута, 30 секунд (13.08.2012 - 14:59) eaborodkin написал(а):
народ как найти ошибку? Подскажите, а то пропаду, уже сколько времени голову ломаю(((
Спустя 3 минуты, 8 секунд (13.08.2012 - 15:02) Игорь_Vasinsky написал(а):
смотреть консоль JS
Спустя 29 минут, 23 секунды (13.08.2012 - 15:32) eaborodkin написал(а):
вот единственная ошибка в консоли:
prompt aborted by user
throw Components.Exception("prompt aborted by user", Cr.NS_ERROR_NOT_AVAILABLE)
Спустя 27 минут, 15 секунд (13.08.2012 - 15:59) eaborodkin написал(а):
о... щас ещё идея появилась решения всей этой задачи, в корне отличная от этой!
Может мне сделать счётчик посекундный, типа setInterval(function(){t++},1000) и получается не делать вообще пауз, а скорее сделать что-то типа расписания, запускать в нужное t нужную функцию с нужным параметром)) Чёрт, буду параллельно этот вариант пробовать, раз предыдущий заглох...
Может мне сделать счётчик посекундный, типа setInterval(function(){t++},1000) и получается не делать вообще пауз, а скорее сделать что-то типа расписания, запускать в нужное t нужную функцию с нужным параметром)) Чёрт, буду параллельно этот вариант пробовать, раз предыдущий заглох...
Спустя 6 часов, 5 секунд (13.08.2012 - 21:59) killer8080 написал(а):
Цитата (eaborodkin @ 13.08.2012 - 10:38) |
ну конечно несколько, Я ж целый массив получаю с помощью sync.php |
Я вообще не понимаю, какой смысл аяксом запрашивать массив айдишников сообщений, а потом каждый по отдельности подгружать? Почему бы сразу не получить все эти сообщения одним запросом? Если конечно они действительно отображаются одновременно. Потом просто периодически опрашивать не появились ли новые сообщения, и подгружать их по мере появления. Зачем постоянно тянуть с сервера одни и те же сообщения? И зачем нужен переменный интервал опроса?
Спустя 10 часов, 47 минут, 35 секунд (14.08.2012 - 08:47) eaborodkin написал(а):
объявления отображаются поочереди, с указанным для каждого временем показа.
Мне сложнее организовать алгоритм проверки на новые объявления, чем каждый раз просто загружать "свежий" список.
интервал опроса не переменный, у меня используется два асинхронно работающих аякс-запроса:
1) синхронизирует список объявлений с базой битрикса;
2) выводит очередное объявлениЕ из списка на экран.
Мне сложнее организовать алгоритм проверки на новые объявления, чем каждый раз просто загружать "свежий" список.
интервал опроса не переменный, у меня используется два асинхронно работающих аякс-запроса:
1) синхронизирует список объявлений с базой битрикса;
2) выводит очередное объявлениЕ из списка на экран.
Спустя 2 часа, 28 минут, 38 секунд (14.08.2012 - 11:15) eaborodkin написал(а):
Цитата (eaborodkin @ 13.08.2012 - 16:59) |
о... щас ещё идея появилась решения всей этой задачи, в корне отличная от этой! Может мне сделать счётчик посекундный, типа setInterval(function(){t++},1000) и получается не делать вообще пауз, а скорее сделать что-то типа расписания, запускать в нужное t нужную функцию с нужным параметром)) Чёрт, буду параллельно этот вариант пробовать, раз предыдущий заглох... |
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<div id="time"></div>
<div id="include"></div>
<script>
var second=<?=time();?>;
var i=0;
var ar_ids;
var id;
var synctime;
var len;
var delaytime=second;
function sync()
{
$.ajax({
type: 'POST',
dataType: 'json',
url: 'sync.php',
success: function(jsondata)
{
ar_ids = jsondata;
len = ar_ids.length;
synctime = second+60;
}
});
};
function contentUpdate(){
if(i==len){i=0;};
id=ar_ids[i];
$("#include").load(
"content.php",
{
ID: id['ID']
},
function(){
if(id['PROPERTY_TIME_M_VALUE']==null) {id['PROPERTY_TIME_M_VALUE']=0;};
if(id['PROPERTY_TIME_S_VALUE']==null) {id['PROPERTY_TIME_S_VALUE']=10;};
delaytime=second+(+id['PROPERTY_TIME_M_VALUE'])*60+(+id['PROPERTY_TIME_S_VALUE'])+1;
}
);
i++;
};
function display(){
second++;
if(synctime<=second)sync();
if(delaytime<=second)contentUpdate();
//document.getElementById('time').innerHTML = second;
}
sync();
setInterval(function(){display();},1000);
</script>
Всё пашет))
Спустя 2 минуты, 25 секунд (14.08.2012 - 11:18) eaborodkin написал(а):
Вопрос по jguery! Как сделать эффект плавного исчезновения старого содержимого и плавного появления нового содержимого?
Спустя 4 минуты, 56 секунд (14.08.2012 - 11:23) killer8080 написал(а):
eaborodkin
я бы эту задачу решал бы иначе. По загрузке страницы загружаем полный список объявлений, вставляем сразу все в тело документа в виде скрытых блоков. По таймеру делаем запросы на наличие новых объявлений, и добавляем по мере появления. Отдельная функция по таймеру перебирает эти блоки, видимый блок скрывает, а следующий делает видимым по кругу, в общем делаем простую ротацию. Как то так. И ненужна гонять лишний трафик, и грузить сервак бессмысленной работой.
я бы эту задачу решал бы иначе. По загрузке страницы загружаем полный список объявлений, вставляем сразу все в тело документа в виде скрытых блоков. По таймеру делаем запросы на наличие новых объявлений, и добавляем по мере появления. Отдельная функция по таймеру перебирает эти блоки, видимый блок скрывает, а следующий делает видимым по кругу, в общем делаем простую ротацию. Как то так. И ненужна гонять лишний трафик, и грузить сервак бессмысленной работой.
Спустя 20 минут, 37 секунд (14.08.2012 - 11:43) eaborodkin написал(а):
впринципе, интересное решение) тока наверное оставлю как есть, т.к. до конца недели надо ещё кучу плюшек и условий прикрутить...
По эффекту подскажите)
p.s. killer8080
если бы Я сделал по твоему варианту, то в момент синхронизации могло бы моргание(обновление) быть видно, а у меня в фоновом режиме.
По эффекту подскажите)
p.s. killer8080
если бы Я сделал по твоему варианту, то в момент синхронизации могло бы моргание(обновление) быть видно, а у меня в фоновом режиме.
Спустя 17 минут, 28 секунд (14.08.2012 - 12:01) killer8080 написал(а):
Цитата (eaborodkin @ 14.08.2012 - 12:43) |
если бы Я сделал по твоему варианту, то в момент синхронизации могло бы моргание(обновление) быть видно, а у меня в фоновом режиме. |
И с чего бы это?
Цитата (eaborodkin @ 14.08.2012 - 12:43) |
По эффекту подскажите) |
Спустя 1 час, 30 минут, 2 секунды (14.08.2012 - 13:31) eaborodkin написал(а):
да Я чё-то туплю, не пойму как в моё решение этот эффект вклинить...