Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » JSON из PHP в JS

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Ситуация следующая.
На PHP имеем скрипт, который вытягивает данные из базы и помещает их в ассоциативный массив, который далее передаются в JS посредством json_encode.  А именно:
 
//php:
while($row = mysql_fetch_assoc($result))
   { $dataset1[] = array (($row['date']),($row['sensor']));  
   }  
 
 
//js:
var w_dir = <?php echo json_encode($dataset1); ?>;  
 
вот. далее эти данные успешно скармливаются jquery-плагину FLOT который рисует замечательный график, ему достаточно данных в виде объекта.  
Теперь хотелка-  нужно чтобы при наведении курсора на точки графика, отображалось значение. Т.е. нужно из этого объекта доставать конкретные данные.
Говоря предметно хочется вот так :
http://www.pureexample.com/jquery-flot/tooltip-line-chart.html
Но в этом примере данные уже в JS, поэтому проблемы нет.
Соответственно вопрос- как вытащить в JS переменные из объекта-массива, желательно без циклов, а прямым обращением, вроде указателя какого-нибудь....

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 00:19 16-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210

Цитата:
как вытащить в JS переменные из объекта-массива

зачем их вытаскивать, если это, по сути, и есть массив, просто представленный в другом виде.
 
ps: в для массива без ключей json_encode уже выдаст массив!
 

Код:
var w = [1, 2, 3];
for(var i = 0; i < w.length; i++)
    alert(w[i]);


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:54 16-09-2013 | Исправлено: Cheery, 01:03 16-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
но нужно вытащить данные не из числового а из ассоциативного массива, причем один параметр в виде unix time а второй int

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 21:26 22-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210

Цитата:
но нужно вытащить данные не из числового а из ассоциативного массива,  

откуда у вас там ассоциативный массив в такой записи?

Цитата:
 $dataset1[] = array (($row['date']),($row['sensor']))

то есть получите массив вида [[1,2],[3,4],[5,6]] в js
да и какая разница, все нормально работает хоть так, хоть так
 

Цитата:
причем один параметр в виде unix time а второй int

и? какие сложности это вызывает, не пойму?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:31 22-09-2013 | Исправлено: Cheery, 21:32 22-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не получается никак
вот к примеру тултипы без вытягивания данных из php
https://github.com/krzysu/flot.tooltip/blob/master/examples/many_series.html
не могу передать внешний массив в "data"
 

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 00:44 23-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210

Цитата:
не могу передать внешний массив в "data"

через js переменную или динамчески, с помощью ajax?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:20 23-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
через переменную.

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 21:37 23-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210
ну, второй вопрос - что вот это делает не так?

Код:
var w_dir = <?php echo json_encode($dataset1); ?>;  

покажите на примере, как надо и что получается.
просто массив с двумя объектами, в одном x значения, во втором y?
[{ data: sin}, { data: cos}]
это?
 

Код:
  $array = array(array("data" => array(1,2,3,4,5,6)), array("data" => array(1.1,2.2,3.3,4.4,5.5)));
  echo json_encode($array);  

 
получаем

Цитата:
[{"data":[1,2,3,4,5,6]},{"data":[1.1,2.2,3.3,4.4,5.5]}]

 
ну, что сложного то ?)  
 

Код:
$dataX = array();
$dataY = array();
 
// ваш цикл
{
$dataX[] = значение X;
$dataY[] = значение Y;
}
 
echo json_encode(array(array('data'=>$dataX), array('data'=>$dataY)));
 
и все..


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:53 23-09-2013 | Исправлено: Cheery, 21:58 23-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот в том то и дело, что вроде всё правильно, но не работает.
 
Flot - известная jquery библиотека, формат данных там действительно именно такой [[1,2],[3,4],[5,6]]  :
 
https://github.com/flot/flot/blob/master/API.md  (раздел Data Format)
 
И когда ему скармливаю  var w_dir = <?php echo json_encode($dataset1); ?>;  то всё отображается правильно.
 
Tooltip plugin - тоже популярный плагин для этой библиотеки и пользует тот же формат данных, вот к примеру функция из стандартных примеров:
 
    $(function ()  
    {
        var sin = [], cos = [];
        for (var i = 0; i < 12; i += 0.2)  
        {   sin.push([i, Math.sin(i)]);
            cos.push([i, Math.cos(i)]);
        }
        
        var options =  
        {   series: { lines: { show: true }, points: { show: true } },
            grid:   { hoverable: true },
            yaxis:  { min: -1.2, max: 1.2 },
            tooltip: true,
            tooltipOpts: { content: "'%s' of %x.1 is %y.4", shifts: { x: -60, y: 25} }
        };
        var plotObj = $.plot( $("#placeholder"),
            [ { data: sin, label: "sin(x)"}, { data: cos, label: "cos(x)" } ],
            options );
    });
 
 
Возникает вопрос, почему ента сволочь не отображает тултипы, когда ей скармливаю w_dir , тогда как если вместо него пишу что-нибудь вроде  [[1,2],[3,4],[5,6]]  - оно начинает их отображать ?

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 00:18 26-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210
ну не тот же формат.. у него x и y разделены.

Цитата:
[ { data: sin, label: "sin(x)"}, { data: cos, label: "cos(x)" } ]

я же показал, как сформировать подобный массив
 

Цитата:
[[1,2],[3,4],[5,6]]  - оно начинает их отображать

наверно потому, что изначально вы получаете строки (я не знаю, какой у вас там тип).
сделайте var_dump и посмотрите. если троки, то преобразуйте к числам - может в этом причина
 
я не могу гадать без конкретного примера, на котором можно поэкспериментировать.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:35 26-09-2013 | Исправлено: Cheery, 00:36 26-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну не тот же формат.. у него x и y разделены

Не разделены они. Там просто два графика рисуется sin и cos. В каждом данные передаются парами :
 
  {   sin.push([i, Math.sin(i)]);  
       cos.push([i, Math.cos(i)]);  
  }  
 
 
у меня в базе данных переменная для оси Х называется date и хранится в формате bigint  (Flot не работает на прямую с timestamp) а переменная для оси Y в формате... упсь... float.
может из-за float проблема ?

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 01:12 26-09-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maverik2210

Цитата:
может из-за float проблема ?

может быть.. я не вижу ваш массив, что получается в js
http://www.w3schools.com/jsref/jsref_parsefloat.asp

Код:
  $test = array('10.3', 11.3);
  echo json_encode($test);

выдаст

Цитата:
["10.3",11.3]

так что, возможно, лучше http://php.net/manual/en/function.floatval.php
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:19 26-09-2013
Maverik2210

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вы были правы, типы не были приведены в числовые после считывания из базы. Интуиция хорошая)
 
Честно говоря я просто не знал, что   пхп функции для чтения из mysql  преобразовывают всё в строки.

Всего записей: 28 | Зарегистр. 25-08-2005 | Отправлено: 19:50 12-10-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » JSON из PHP в JS


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru