Проблема с назначением данных на диаграмму JQplot, которая динамически получает данные с помощью jquery

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

Что я сделал:

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

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

Данные, если я привяжу их к переменной, выполнив:

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;
});

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

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

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

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

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


person Shrayas    schedule 05.09.2011    source источник


Ответы (2)


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

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

РЕДАКТИРОВАТЬ:

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

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);
}

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

person Kavitha K Gowd    schedule 05.09.2011
comment
Согласованный. Я заметил это и тоже указал на это, есть ли функция в jQuery, чтобы сделать это для меня? - person Shrayas; 05.09.2011
comment
На самом деле просто необработанный текст. Позвольте мне обновить свой вопрос скриншотами. - person Shrayas; 05.09.2011
comment
Я добавил скриншоты, пожалуйста, проверьте - person Shrayas; 05.09.2011
comment
В первом случае это формат массива. Во втором случае это все еще формат массива, но массивы объектов json. Так что это нужно изменить на простой массив javascript. Метод грубой силы для этого будет состоять в том, чтобы перебрать каждый объект и создать массив. - person Kavitha K Gowd; 05.09.2011
comment
Потрясающий соус! его нужно было преобразовать в массивы, как вы сказали :) Мне немного помогла здесь также - person Shrayas; 06.09.2011

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

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

person longstaff    schedule 05.09.2011
comment
Да, приятель, я буду помнить об асинхронности. И проблема заключалась в том, что вся структура данных возвращает штуку, @Kavitha kg дала мне ответ :) - person Shrayas; 06.09.2011