Проблема с назначением данных диаграмме JQplot для динамического получения данных с использованием jquery - PullRequest
1 голос
/ 05 сентября 2011

Я пытаюсь сделать следующее: получить некоторые данные из бэкэнда и связать их с графиком подсвечника JQplot.

Что я достиг:

  • Данныегенерируется в бэкэнде
  • Данные закупаются с помощью функции jQuery $ .get ().

Так вот в чем проблема:

данные, если я свяжу его с переменной, выполнив:

CASE I_
ohlc = [['2011-01-03 09:30:00',325.7,325.99,324.82,325.39],['2011-01-03 09:35:00',325.44,326.74,325.4,326.46],['2011-01-03 09:40:00',326.54,327.38,326.38,327.23]];

снимок экрана журнала случая 1

Это работает как ветер.

Нокогда я использую

CASE II_
$.get('MYSERVLET', function(data){
ohlc = data;
});

скриншот журнала Case 2

и диаграмма генерируется, я получаю сообщение об ошибке на консоли:

Uncaught #<Object>
init
w.jqplot
(anonymous function)
jQuery.event.handle
jQuery.event.add.elemData.handle.eventHandle

Также, когда я делаю console.log в CASE I, я получаю их как массивы.Но в случае II это выглядит как обычные данные.Я не знаю, поможет ли это, но я заметил это.

Кто-нибудь знает, как это исправить?Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

помните, что get является асинхронным, убедитесь, что он завершил загрузку данных, прежде чем инициализировать график, вы должны установить async = false, чтобы убедиться, что он возвращает inline.

если проблема не в этом, то будет возвращена структура данных. попробуйте использовать json, поскольку он сохраняет массивы и т. д.

1 голос
/ 05 сентября 2011

Для jqplot данные должны быть в виде массива. Возможно, вам придется проверить, какой формат данных вы получаете в случае 2. Если они не в формате массива, то внутри функции $ .get вам, возможно, придется написать какой-то специальный код, который преобразует его в формат массива.

CASE II_
$.get('MYSERVLET', function(data){
var temp = data;
//code to convert data to array format
//populate ohlc.
});

EDIT:

Массив, аналогичный 1-му случаю, может быть сгенерирован с использованием 2 для циклов

ohlc=[];
for(int l1=0;l1<data.length;l1++)
{
var temp = [];
for(int l2=0;l2<data[l1].length;l2++)
{
temp.push(data[li][l2]);
}
ohlc.push(temp);
}

И, как предположил Шортстик, график должен быть нарисован только после того, как данные возвращены из метода get.

0 голосов
/ 01 февраля 2013
var line1=[];
for( var j = 0; j < list.length; j++){//creates the rows in the table based on the amount of videos
    x = table.insertRow(-1);    //inserts the cells into the row
    x.insertCell(0).innerHTML = list[j][0];                             
    x.insertCell(1).innerHTML = list[j][2];         
    //x.insertCell(2).innerHTML = list[(j)][5];
    //x.insertCell(2);  
    line1.push([j,1]); 
}   
...