Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: FLOT! Не хочет рисовать график..

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: то ли у json не верная строка, то ли flot ...
ADIOS
Отправлено: 17 Ноября, 2013 - 19:17:48
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Все привет!!!

Тема такая.

Через Ajax получаю данные счетчика в формате json. Данные приходят, парсируются на данном этапе все норм.

Теперь полученные данные нужно направить на построение графика в jquery.flot
Ниже кусок кода, который собирает данные:

1.
CODE (javascript):
скопировать код в буфер обмена
  1. { label: "Просмотры", color: "#f26c4f", data: [["2013-11-14", 20],["2013-11-15", 5],]}


В первом случае я напрямую в параметр data вставил данные счетчика. FLOT РИСУЕТ ГРАФИК

2.
CODE (javascript):
скопировать код в буфер обмена
  1. { label: "Посетители", color: "#8dc63f", data: [res.visitors]}


Во втором случае (как и задумано) - res.visitors - парсированые данные json передаю точно такие же данные как и в первом случае.

Передал res.visitors на страницу, отображается все как положено ["2013-11-14", 20],["2013-11-15", 5],, НО САМОГО ГРАФИКА НЕТ.

В чем проблема?


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
IllusionMH
Отправлено: 17 Ноября, 2013 - 22:29:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




ADIOS, а если убрать квадратные скобки? Похоже, что лишняя вложенность получается
 
 Top
ADIOS
Отправлено: 18 Ноября, 2013 - 04:00:29
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




IllusionMH пишет:
ADIOS, а если убрать квадратные скобки? Похоже, что лишняя вложенность получается


Скобок хватает, тут дело в другом...

flot сам убирает скобки и кавычки в параметре
CODE (javascript):
скопировать код в буфер обмена
  1. [["2013-11-14", 20],["2013-11-15", 5],]


и оставляет данные вот в таком виде 2013-11-14, 20,2013-11-15, 5 и все норм график работает

а ответ json'a оставляет в таком же виде [["2013-11-14", 20],["2013-11-15", 5],] с кавычками и скобками. и соответственно это не работает..

пробовал без скобок отправить данные 2013-11-14, 20,2013-11-15, 5 но все равно не работет..

строка должна быть такой
CODE (javascript):
скопировать код в буфер обмена
  1. [["2013-11-14", 20],["2013-11-15", 5],]


и на выходе должно быть так 2013-11-14, 20,2013-11-15, 5.

Может дело в кодировки json?


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
Мелкий Супермодератор
Отправлено: 18 Ноября, 2013 - 08:37:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если res.visitors - массив точек, то вот здесь лишняя вложенность:
ADIOS пишет:
data: [res.visitors]


-----
PostgreSQL DBA
 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 11:03:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




ADIOS, вы пытаетесь вложить массив(иначе было б странно) res.visitors в массив. А нужно просто передать массив как параметр.
Не мог скопировать нужную строку, т.к. с телефона писал.
 
 Top
ADIOS
Отправлено: 18 Ноября, 2013 - 14:03:01
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Мелкий пишет:
Если res.visitors - массив точек, то вот здесь лишняя вложенность:
ADIOS пишет:
data: [res.visitors]


["2013-11-14", 20],["2013-11-15", 5], вот так передаются данные


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
IllusionMH
Отправлено: 18 Ноября, 2013 - 14:05:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




ADIOS, res.visitors это ж массив?
Ну так не нужно его пихать еще раз в массив пробуйте data: res.visitors
 
 Top
ADIOS
Отправлено: 18 Ноября, 2013 - 16:45:26
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.                 jQuery.ajax({  
  3.                 url: "",  
  4.                 cache: false,
  5.                 success: function(html){  
  6.                                         var res = jQuery.parseJSON(html);
  7.                                        
  8.                
  9.                                         var all_data = [
  10.                                                 { label: "Просмотры", color: "#f26c4f", data: res.views},
  11.                                                 { label: "Посетители", color: "#8dc63f", data: res.visitors}
  12.                                         ];
  13.                                 ////////////////////////////   
  14.                                         // преобразуем даты в UTC
  15.                                         for(var j = 0; j < all_data.length; ++j) {
  16.                                                 for(var i = 0; i < all_data[j].data.length; ++i)
  17.                                                 all_data[j].data[i][0] = Date.parse(all_data[j].data[i][0]);
  18.                                         }
  19.  
  20.                                         var plot_conf_lines = {
  21.                                                 series: {
  22.                                                 lines: {
  23.                                                 show: true,
  24.                                                 lineWidth: 2
  25.                                         },
  26.                                                 points: { show: true }
  27.                                         },
  28.                                         grid: { hoverable: true, clickable: true,  backgroundColor: '#f8f8f8', borderWidth: 1, borderColor: '#d5d5d5' },
  29.                                         xaxis: {
  30.                                         mode: "time",
  31.                                         timeformat: "%d/%m",
  32.                                         }
  33.                                 };
  34.  
  35.                                 jQuery.plot(jQuery("#graph-lines"), all_data, plot_conf_lines);
  36.  
  37.        
  38.                                 function showTooltip(x, y, contents) {
  39.                                 jQuery('<div id="tooltip"  class="tooltipflot">' + contents + '</div>').css({
  40.                                                 position: 'absolute',
  41.                                                 display: 'none',
  42.                                         top: y - 16,
  43.                                         left: x + 20
  44.                                 }).appendTo('body').fadeIn();
  45.                                 }
  46.  
  47.                                 var previousPoint = null;
  48.  
  49.                                 function _getDate(x) {
  50.                                         var month_names = new Array("Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря");     
  51.                                         var d = new Date(x);
  52.                                         var current_date = d.getDate();
  53.                                         var current_month = d.getMonth();
  54.                                         var current_year = d.getFullYear();
  55.        
  56.                                         return current_date + " " + month_names[current_month]  + " " + current_year;
  57.        
  58.                                 }
  59.  
  60.                                 jQuery('#graph-lines').bind('plothover', function (event, pos, item) {
  61.                                 if (item) {
  62.                                         if (previousPoint != item.dataIndex) {
  63.                                         previousPoint = item.dataIndex;
  64.                                         jQuery('#tooltip').remove();
  65.                                         var x = item.datapoint[0],
  66.                                         y = item.datapoint[1],
  67.                                                         date = _getDate(x) ;
  68.                                         showTooltip(item.pageX, item.pageY, y + ' за ' + date);
  69.                                         }
  70.                                 } else {
  71.                                         jQuery('#tooltip').remove();
  72.                                         previousPoint = null;
  73.                                 }
  74.                                 });
  75.                                
  76.                                 jQuery("#graph-lines").bind("plotclick", function (event, pos, item) {
  77.                                         if (item) {
  78.                                                 var x = item.datapoint[0];
  79.                                                 var date = _getDate(x);
  80.                                                
  81.                                                 var msg = "Данные за " + date + ". " + item.series.label + ": " + item.datapoint[1] + ".";
  82.                                                 var position = "top-right";
  83.                                                 var scrollpos = jQuery(document).scrollTop();
  84.                                                 if(scrollpos < 50) position = "customtop-right";
  85.                                                 jQuery.jGrowl(msg, { life: 10000, position: position});
  86.  
  87.                                                 plot.highlight(item.series, item.datapoint);
  88.                                         }
  89.                                 });
  90.                                 ////////////////////////////
  91.                         }  
  92.          });
  93.  


вот результат
Прикреплено изображение (Нажмите для увеличения)
1.jpg


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
ADIOS
Отправлено: 18 Ноября, 2013 - 20:41:50
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Май 2010  
Откуда: Россия, Калуга


Помог: 2 раз(а)




Преобразовал массив в строку получил views=%5B2013-11-18%2C+4%5D%2C&visitors=%5B2013-11-18%2C+1%5D%2C

а как получить "чистые" без символов экранирования


-----
Не откладывай работу на завтра, от которой можно вообще отказаться
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB