Как динамически создать объект jquery с данными json для JustGage

Я хочу использовать justgage для отображения данных из базы данных mysql, поэтому все мои объекты должны создаваться динамически.
Мой запрос правильно извлекает все данные, которые я хочу, поэтому то, что включено в файл getData.php, прекрасно работает.

Когда я хочу зациклить эти данные, это не работает, я не могу извлечь каждую строку со всеми данными, это дает мне что-то вроде [объект объекта], [объект объекта], [объект объекта], …

Кроме того, я не знаю, как использовать мои динамические данные для создания моего «нового JustGage», а затем обновлять данные каждые 5000 мс

Можно ли делать то, что я хочу?

getData.php

$link=connectBD();
$query="SELECT iod.ReadingValue, iod.Timestamp, io.Name AS ioName, io.OrangeAlarmVal, io.RedAlarmVal, r.Name AS radioName
FROM io_data iod
JOIN io ON io.ID_IO = iod.ID_IO
JOIN radio r ON r.IDRadio = io.IDRadio
WHERE iod.Timestamp = (SELECT MAX(iod2.Timestamp)
FROM io_data iod2
WHERE iod2.ID_IO=iod.ID_IO)";

$table = array();
$table['cols'] = array(
array('label' => 'ReadingValue', 'type' => 'number'),
array('label' => 'Timestamp', 'type' => 'string'),
array('label' => 'ioName', 'type' => 'string'),
array('label' => 'OrangeVal', 'type' => 'number'),
array('label' => 'RedVal', 'type' => 'number'),
array('label' => 'radioName', 'type' => 'string')
);

$result=selectData($link, $query);
$rows = array();
while($r = getRowElement($result)) {
$temp = array();
$temp[] = array('rv' => $r['ReadingValue']);
$temp[] = array('ts' => $r['Timestamp']);
$temp[] = array('ion' => $r['ioName']);
$temp[] = array('op' => $r['OrangeVal']);
$temp[] = array('rp' => $r['RedVal']);
$temp[] = array('rn' => $r['radioName']);

$rows[] = array('c' => $temp);
}

// populate the table with rows of data
$table['rows'] = $rows;

// encode the table as JSON
$jsonTable = json_encode($table);

// set up header; first two prevent IE from caching queries
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

// return the JSON data
echo $jsonTable;

other.js

$(document).ready(function(){

/** Get Data from database **/
var dataIO=getData();

$.each(dataIO, function(i, item) {
alert(item);
});

/*** This part should be generate within the loop with the retrieved fields (data between '**')

var maxGreen=**OrangeVal** - 0.1;
var minOrange=**OrangeVal**;
var maxOrange=**RedVal** - 0.1;
var minRed=**RedVal**;

**ioNameVal**=new JustGage({
id:"**ioNameVal**",
value:**ReadingValue**,
min:-50,
max:0,
title:"ioNameVal",
decimals: 1,
customSectors :[{"lo":-29.4,"hi":maxGreen,"color":"#a9d70b"},
{"lo":minOrange,"hi":maxOrange,"color":"#FF6A00"},
{"lo":minRed,"hi":0,"color":"#ff0000"}],
levelColorsGradient: false
});

// For each JustGage created, I need to setup a automatic reading in the
// database, so when the data change, the JustGage is refreshed
setInterval(function(){
**ioNameVal**.refresh(**ReadingValue**));
}
****/
}

function getData(){
var json = $.ajax({
url: 'getData.php',
dataType: 'json',
async: false
}).responseText;

data = $.parseJSON(json);

return data;

}

Обновить:
Теперь я могу извлекать свои данные из базы данных и динамически генерировать все мои объекты justgage. Но я не уверен, что это хороший способ. Мне нужно обновить все мои датчики в соответствии с новыми данными в базе данных. Есть ли другой способ сделать это?

other.js

/** Get Data from database **/
var dataIO=getData(3);

/*$.each(dataIO.rows, function(i, item) {
alert(item);
});*/

var idIO; var readingValue; var timestamp; var defaultIOType; var ioName; var orangePressure; var redPressure; var radioName;
var maxGreen; var minOrange; var maxOrange; var minRed;
var cpt=1;
$.each(dataIO.rows, function(i, object) {

$.each(object, function(j, val) {
// Pour chaque row
$.each(val, function(k, temp) {
//alert(k + "=" + temp);
switch(k){
case 'id':
idIO=temp;
break;
case 'rv': // reading value
readingValue=temp;
break;
case 'ts': // timestamp
timestamp=temp;
break;
case 'iot': // default IO type
readingdefaultIOType=temp;
break;
case 'ion': // IO Name
ioName=temp;
break;
case 'op': // orange pressure
orangePressure=temp;
if(orangePressure!=null){
maxGreen=orangePressure-0.1;
minOrange=orangePressure;
}
else{
maxGreen=-22.6;
minOrange=-22.5;
}
break;
case 'rp': // red pressure
redPressure=temp;
if(redPressure!=null){
maxOrange=redPressure-0.1;
minRed=redPressure;
}
else{
maxOrange=-20.1;
minRed=-20;
}
break;
case 'rn': // radio name
radioName=temp;
break;
}
});
eval('gauge_'+idIO+'= new JustGage({id:idIO,value:readingValue,min:-29.4,max:0,title:ioName,label:"inHg",decimals: 1,customSectors : [{"lo":-29.4,"hi":maxGreen,"color":"#a9d70b"},{"lo":minOrange,"hi":maxOrange,"color":"#FF6A00"},{"lo":minRed,"hi":0,"color":"#ff0000"}],levelColorsGradient: false})');

/*setInterval(function(){
eval('gauge_'+idIO).refresh(getDataRefresh(idIO));
},3000
);*/



cpt++;
});
});
setInterval(function(){

$.each(dataIO.rows, function(i, object) {

$.each(object, function(j, val) {
// Pour chaque row
$.each(val, function(k, temp) {
//alert(k + "=" + temp);
switch(k){
case 'id':
idIO=temp;
break;
}
});

eval('gauge_'+idIO).refresh(getDataRefresh(idIO));
});
});
},30000
);

function getData(typeToGet){
var json = $.ajax({
url: 'getData.php', // make this url point to the data file
dataType: 'json',
type:"POST",
data:{"typeToGet":typeToGet},
async: false
}).responseText;

// Create our data table out of JSON data loaded from server.
data = $.parseJSON(json);

return data;
}

function getDataRefresh(id){
var json = $.ajax({
url: 'getDataRefresh.php', // make this url point to the data file
dataType: 'json',
type:"POST",
data:{"id":id},
async: false
}).responseText;

// Create our data table out of JSON data loaded from server.
data = $.parseJSON(json);
return data;
}

0

Решение

  1. Вы пытаетесь alert элементы, которые типизируют аргументы в строки. Ваши объекты предметов не имеют пользовательских toString() метод, поэтому по умолчанию для строкового значения [object Object],

Если вы хотите проверить, как выглядит элемент, попробуйте использовать devtools / console. Вместо alert(item)использовать console.log(item) или же console.dir(item); затем откройте консоль (Ctrl + сдвиг + я в Chrome и Firefox).

  1. То, что вы хотите сделать, возможно. Вы хотите прочитать о setTimeout, Однако, если честно, опрос сервера на предмет данных не является хорошим дизайном.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]