Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.04.2009, 15:22
Интересующийся
Отправить личное сообщение для czar Посмотреть профиль Найти все сообщения от czar
 
Регистрация: 08.04.2009
Сообщений: 25

вот я делал обновлялку для таблицы с данными. каждые $timer секунд у меня шёл запрос к базе и получал данные от не в виде обекта джейсона
формата вида:
data = {"bids":[{"Security":" ","QType":" ","Volume":" ","Price":" ","Trader":null,"Client":null,"Comments":" ","Date_add":null,"Date_update":null,"Type":"1","A ction":{"n":true,"e":false,"d":false}}],"offers":[{"Security":" ","QType":" ","Volume":" ","Price":" ","Trader":null,"Client":null,"Comments":" ","Date_add":null,"Date_update":null,"Type":"2","A ction":{"n":true,"e":false,"d":false}}]}

собвенно переделывал массив php в джейсон...саму функцию не помню, бо переделывал зендом.Zend_Json::encode($array);
у меня две таблицы bids и offers потому два объекта внутри.
чистить код для данного примера не захотел,думаю и так понятно.. запускается аджакс запрос, при получении данных пробигнается по всему массиву и добавляет построчно в таблицу строки. используется плагин dataTable для вида таблицы и сортировки-фильтрации, но это к делу не сильно относится. суть в получении и прохождению по данным массива.

думаю будет полезно )
$("#message").everyTime(
			$timer,
			function(i){
				$.ajax({
					url: "<?php echo $this->baseUrl?>flow/get.new.rows/<?php echo $this->locid.$this->forLink.$this->urlEnd;?>",
					global: false,
					type: "POST",
					dataType: 'json',
					beforeSend: function(){
						$('.ui-widget').show();
					},
					complete : function(){
						$(".ui-widget").hide();
						$('td a').addClass('thickbox');
					},
					success: function($data){
					//alert($data.bids !== undefined);
						if($data.bids != undefined || $data.offers != undefined)
						{
							if($data.bids.length > 0) bidsTable.fnClearTable( 0 );
							if($data.offers.length > 0)offersTable.fnClearTable( 0 );
							$.each($data,function(a,b){
								$.each(b,function(i,v){
									var date_add = v.Date_add != null ? new Date(v.Date_add*1000): '';
									var date_update = v.Date_update != null ? new Date(v.Date_update*1000): '';
									
									var $act_n = v.Action.n ? '<a href="http://flow:81/flow/edit.<?php echo $this->loc?>-'+v.Type+'-0<?php echo $this->urlEnd?>?height=250&width=300" class="thickbox"><img src="/design/img/btn_add.png" /></a>':'';
									var $act_e = v.Action.e ? '<a href="http://flow:81/flow/edit.<?php echo $this->loc?>-'+v.Type+'-'+v.id+'<?php echo $this->urlEnd?>?height=250&width=300" class="thickbox"><img src="/design/img/btn_edit.png" /></a>':'';
									var $act_d = v.Action.d ? '<a href="http://flow:81/flow/delete.'+v.id+'-<?php echo $this->locid.$this->urlEnd?>"><img src="/design/img/btn_delete.png" /></a>':'';
								
									
									var $row = [
										v.Security != null ? v.Security.toString(): '', 
										v.QType != null ? v.QType.toString(): '',
										v.Volume != null ? v.Volume.toString(): '',
										v.Price != null ? v.Price.toString(): '',
										v.Trader != null ? v.Trader.toString(): '',
										v.Client != null ? v.Client.toString(): '',
										v.Comments != null ? v.Comments.toString(): '',
										v.Date_add != null ? date_add.format('d.m.Y H:i').toString(): date_add.toString(),
										v.Date_update != null ? date_update.format('d.m.Y H:i').toString():date_update.toString(),
										$act_n+' '+$act_e+' '+$act_d
									];
								
									if(v.Type.toString() == "1")
									{
										bidsTable.fnAddData($row);
									}
									if(v.Type.toString() == "2"){
										offersTable.fnAddData($row);
									}
								
								});
							});
						}
					}
				});
			}
		);


если нужно сортировать сам массив, то я его сортирую до получения, то есть средсвами php...ну это начальная сортировка..потом уже как душе угодно.

Последний раз редактировалось czar, 28.04.2009 в 15:29.
Ответить с цитированием
  #12 (permalink)  
Старый 29.04.2009, 14:43
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Лучше отдельно передавать массив хидеров, а вместо хеша будут массивы -- меньше траффика
Ответить с цитированием
  #13 (permalink)  
Старый 29.04.2009, 19:33
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
А я бы json.messages массивом сделал. Трафик меньше и сервер генерацией ключей грузить не надо.
я б сказал, что если не нужно по id искать сообщения, то делать хэш - ненужная сложность
Ответить с цитированием
  #14 (permalink)  
Старый 30.04.2009, 10:50
Интересующийся
Отправить личное сообщение для czar Посмотреть профиль Найти все сообщения от czar
 
Регистрация: 08.04.2009
Сообщений: 25

Сообщение от e1f Посмотреть сообщение
Лучше отдельно передавать массив хидеров, а вместо хеша будут массивы -- меньше траффика
не понял... что такое хидеры?? можно пример или более доступно объяснить?
Ответить с цитированием
  #15 (permalink)  
Старый 30.04.2009, 16:12
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

data = {
    "head": [ "Security", "QType", "Volume", "Price", "Trader", "Client", "Comments", "Date_add", "Date_update", "Type", "Action" ],
    "rows": [
        { "id":"bids", "data": [ " ", " ", " ", " ", null, null, " ", null, null, "1", {"n":true,"e":false,"d":false}] }
        { "id":"offers", "data": [ " ", " ", " ", " ", null, null, " ", null, null, "1", {"n":true,"e":false,"d":false}] }
    ]
}
Ответить с цитированием
  #16 (permalink)  
Старый 30.04.2009, 19:30
Интересующийся
Отправить личное сообщение для czar Посмотреть профиль Найти все сообщения от czar
 
Регистрация: 08.04.2009
Сообщений: 25

хм..как вариант...надо попробовать.. может быстрее гонять будет.. хотя у меня и так не превышает 100 строчек.
Ответить с цитированием
  #17 (permalink)  
Старый 05.05.2009, 00:20
Интересующийся
Отправить личное сообщение для SirNaFigator Посмотреть профиль Найти все сообщения от SirNaFigator
 
Регистрация: 27.04.2009
Сообщений: 16

А вот еще вопрос на засыпку:
на данный момент происходит следующее.

По таймеру получаются данные в json формате, обрабатываются функцией отображения и вставляются аппендом в див заданой высоты с overflow-y: scroll;

Так вот. При вставке новых сообщений их не видно, тоесть приходится самому крутить колесо мышки чтобы увидеть их в самом низу дива.
А можно ли сделать так, чтобы после вставки сообщения происходил как бы скрол на последнее? focus и scrollby пробовал, не помогает =(
Хотелось бы узнать можно ли это сделать средствами jquery ??
Ответить с цитированием
  #18 (permalink)  
Старый 05.05.2009, 13:37
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

$('#myDiv').scrollTop($('#myDiv').height()||0)
Ответить с цитированием
  #19 (permalink)  
Старый 05.05.2009, 18:16
Интересующийся
Отправить личное сообщение для SirNaFigator Посмотреть профиль Найти все сообщения от SirNaFigator
 
Регистрация: 27.04.2009
Сообщений: 16

Однако, почему-то не работает.

вот собственно мой код:
Код:
var count = 0;
var chat_mode = 'all';
function ChatGetMess(){ jQuery.getJSON('chat_gm.php?chat_mode='+chat_mode+'', {}, function(json){
					for(var k in json.messages){
						count++;
						jQuery('#mes').append('<div class=\"shoutbox-list\" id=\"list-'+count+'\">' + ShowMessage(json.messages[k]) + '</div>');

						$('#list-'+count).fadeIn('slow');
						$(function(){
							$('.scroll-pane').jScrollPane({showArrows:true, scrollbarWidth:16, dragMaxHeight:20});
						});
						$('#mes').scrollTop($('#mes').height()||0);
					}
				});
				timeoutID = setTimeout(ChatGetMess, 5000);
			}
сдвига в самый низ дива не происходит =(((((
Ответить с цитированием
  #20 (permalink)  
Старый 05.05.2009, 18:37
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Всегда знал, что методы .height, .width -- УГ.
$('#mes').scrollTop($('#mes').get(0).scrollHeight||0)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь в JavaScript михаил Общие вопросы Javascript 26 30.10.2013 12:07
Я - нуб. Нужна помощь :) AMARIAL Internet Explorer 27 28.04.2009 21:23
Создание вкладок, нужна помощь... CaHuTaP Общие вопросы Javascript 3 12.02.2009 18:41
Кроссдоменный GET запрос. Нужна помощь! notxcain AJAX и COMET 4 07.12.2008 20:55
Срочно нужна помощь Гость Общие вопросы Javascript 2 02.09.2008 14:13