Таймер для нескольких магазинов
Всем привет!
Реализовал на своем сайте таймер с добавлением 30 минут к текущему времени таким образом: setInterval ( function () { $.post( 'include/time_server.php', {'time_new':'1'}, function(data){ var arr_time = data.split(' '); $('.data').val(arr_time[0]); $('.time').val(arr_time[1]); }); }, 1000); В файле time_server.php прибавляю 30 минут к текущему времени и вывожу на главной странице (в блоки с классами data и time) ajax-ом. Суть в том что блоков с блоками data и time может быть сколько угодно. И пока мне нужно прибавлять ко всем блокам одинаковое количество минут(30), то все работает нормально, а сейчас возникла необходимость каждому блоку прибавлять разное количество минут(10, 15, 45, 90, ...). Но не знаю как это реализовать. Не хотелось-бы каждому блоку выводить циклом отдельный js код, ведь этих блоков может быть сколько угодно. Как переделать мой js код под новые условия. А время запрашиваю на сервере, потому что у пользователей часы могут быть настроены по разному. |
arkadii_parovozov,
А что такое - каждый блок? чем они различаются? Как time_server.php отличит, кому сколько минут добавлять? Как function(data) различит, куда какой результат писать? |
А что такое - каждый блок? - блоков может быть сколько угодно, каждый блок содержит в себе информацию о конкретном магазине.
чем они различаются? - для пользователя - контентом, для браузера - id-шником. Как time_server.php отличит, кому сколько минут добавлять? - можно этот параметр записывать в time_new. Как function(data) различит, куда какой результат писать? - если бы я знал ответ на этот вопрос, то я бы тему не открывал. Сейчас я решаю этот вопрос таким образом: ?> <script> setInterval ( function () { $.post( 'include/time_server.php', {'time_new':'<?php echo $row['time']?>'}, function(data){ var arr_time = data.split(' '); $('#data_<?php echo $row['id']?>,#2data_<?php echo $row['id']?>').val(arr_time[0]); $('#time_<?php echo $row['id']?>,#2time_<?php echo $row['id']?>').val(arr_time[1]); }); }, 1000); </script> <?php но хотелось бы обойтись одной функцией... |
arkadii_parovozov,
Это вы генерите в странице для каждого блока свой скрипт. Теперь представьте не индивидуальный скрипт, а универсальный, Крутится setInterval. По идее, time_server.php должен получать полный перечень индексов блоков с временным сдвигом и возвращать массив сразу для всех блоков - с конкретным индексом блока, датой и временем - и в функции нужно раскидывать полученный массив по всем блокам. Как-то так. |
Ну да. Теперь вопрос в том, что лучше, посылать на сервер 10 000 запросов каждую секунду или посылать один запрос а обрабатываться он будет в 10 000 раз медленнее...
Наверное так оставлю. Буду создавать для каждого блока свой скрипт. |
arkadii_parovozov,
А зачем вам 10 000 запросов (и еще 10 000 setInterval) или 10 000 обработок? У вас что, на странице 10 000 блоков с датой и временем? что это за страница такая? Для кого? |
Естественно столько магазинов выводить на страницу никто не будет, это я так, размышляю, чисто гипотетический... Хотя, если представить что у меня в базе 1 000 000 магазинов, и я их всех вывожу в карту сайта, то....
|
arkadii_parovozov,
Представьте себе на карте на экране десктопа (не говорю о смартфоне) 1000000 точек размером хотя бы в 1 пиксел... что там от карты останется? А если хотя бы 100 блоков дата-время одновременно вывести на экран... Подумайте над тем, что, когда и как вы отображаете - и, мне кажется, много объектов одновременно не понадобится Подавать запросы по мере появления объекта на экране. |
Не знаю актуальна ли данная тема...
Сдвиг времени для каждого блока можно затолкать в data-атрибут каждого из блоков с "часами". Далее с сервера можно запросить текущее время, пробежаться по всем блокам с часами прибавляя к полученному с сервера значению сдвиг из data-атрибута. После остается только перезаписать дату-время в блоках. Не подходит? |
О! Вот эта хорошая идея. Запрашивать только дату у сервера, а потом скриптом прибавлять сдвиг времени уже на клиенте.
Схема получается примерно такая: <div class="magazin"> <div class="bloki" id="<?php echo $row['id']."_data_".$row['time']?>"></div> <div class="bloki" id="<?php echo $row['id']."_time_".$row['time']?>"></div> </div> и таких блоков может быть сколько угодно. Получается, скриптом нужно парсить все классы bloki потом вырезать из id "$row['time']" потом прибавлять к времени сервера это значение и выводить обратно в блок с текущем id-шником? И еще вопрос: много ли ресурсов будет потреблять этот скрипт на клиенте? |
arkadii_parovozov, я смотрю Вы любите извращаться.
Ресурсоемкость зависит от реализации. |
<div class="magazin"> <div class="bloki" data-id="<?php echo $row['id'];?> data-minutes="<?=$row['time'];?>"></div> <div class="bloki" data-id="<?php echo $row['id'];?> data-minutes="<?=$row['time'];?>"></div> </div> <script type="text/javascript"> $(function(){ var cur_time=(new Date()).getTime()/1000;//Время от которого буду устанавливать сдвиг. $('.magazin>[data-minutes]').each(function(){ $(this).text(cur_time+parseFloat($(this).attr('data-minutes'))); }); }); </script> |
Цитата:
$(this).text(cur_time+$(this).data('minutes')); Если к примеру атрибут будет содержать json формат, то такое обращение вернет готовый объект. |
)) Извращаюсь потому что я с js на "Вы". Спасибо за пример!
|
laimas,
Спасибо! |
Цитата:
К тому же из data-атрибута ожидаются вполне определенные данные имеющие тип int или float. К чему приведет (float)cur_time+(object)$(this).data('minutes'), к NaN? |
Цитата:
Цитата:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> $(function() { $.each($('p'), function() { alert($(this).data('m')+5) }) }); </script> </head> <body> <p data-m="123"></p> <p data-m="123.4"></p> </body> </html> |
Цитата:
Цитата:
Я предполагал, что вы имеете ввиду несколько другой тип данных. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> $(function() { $('p').last().attr('data-m',JSON.stringify({foo:'bar'})); $('p').each(function(){ alert($(this).data('m')+5); }); }); </script> </head> <body> <p data-m="123"></p> <p data-m="json"></p> </body> </html> |
Ну здрасьте, я же не сумасшедший, коли работаю с числами мною же определенными, то уж точно знаю чего ожидать. :)
|
Цитата:
Спасибо за информацию о jq.data, приму к сведению. |
Цитата:
|
Часовой пояс GMT +3, время: 23:43. |