2011-08-25 5 views
0

Я пытаюсь отобразить некоторые данные с помощью Highcharts в окне EXTJS 3. С фиксированным массивом данных все работает, но мне нужно отображать данные, взятые из cgi python, который возвращает json. Это как питон CGI создает мои данные (кусочек, я пропустил подключение к БД и так далее):ExtJS 3 и Highcharts, проблема JsonStore при загрузке данных

query = "select timestamp, value from "+measure_table+" where id_resource = 280 and timestamp < '2011-07-13 03:59:00'" 
    #execute the query 
    cur.execute(query) 
    rows = cur.fetchall() 

    #create the empty json data rpeository to be filled in 
    json_root = { 'fields': ['timestamp', 'value'], 'data':[] } 

    for row in rows: 
      json_root['data'].append({'timestamp':str(row[0]), 'value':row[1]}) 

    #spit out the json and we are done! 
    req.write(str(json_root)) 

И это JS, в котором я пытаюсь загрузить эти данные:

 var jproxy = new Ext.data.HttpProxy({ 
      url: 'the url where to find the cgi' 
    }); 
    var jstore = new Ext.data.Store({ 
      proxy: jproxy, 
      reader: new Ext.data.JsonReader({ 
        idProperty: 'timestamp', 
        root: 'data', 

        fields: [ 
          {name: 'timestamp', mapping: 'timestamp'}, 
          {name: 'value', mapping: 'value'}, 
         ] 
      }) 
    }); 

Затем я создаю окно и диаграмму. 2 вопроса сейчас: первый довольно прост: что случилось с этим кодом? поджигатель консоль говорит:

о неопределен

если (o.metaData) {

в строке 26042 из доб-все-debug.js, один из отладки скриптов я включен в мой заголовок html. Окно уже создано, но, конечно, в нем нет диаграммы. Какая ошибка это? если я комментирую большой/* .... */создание прокси-сервера и хранилища, ошибка исчезает, поэтому проблема должна быть там. EDIT: я исправил эту проблему, я загрузил магазин с неправильной функцией. Я использовал jstore.loadData() вместо jstore.load(), моя ошибка..sorry

Второй вопрос: : это (следующий код) правильный способ для отображения данных с помощью высоких диаграмм из jsonstore? (мы находимся в создании диаграммы, я не отправляю весь код, потому что работает и, вероятно, это не полезно, чтобы разместить его)

      xField: 'timestamp', 
          store: jstore, 
          series: [{ 
            yField: 'value' 
          }] 
    } 

Большое большое спасибо за любой ответ!

EDIT: новая проблема после того, как я установил загрузку данных:

too much recursion 
jqextend(),DanaI...xtjs.js (riga 81) 
merge(),DanaI...xtjs.js (riga 92) 
Chart(),DanaI....src.js (riga 3922) 
options = Object { chart={...}, title={...}, altri elementi...} 
callback = undefined 
draw(),DanaI...hart.js (riga 229) 
call(),DanaI...ebug.js (riga 1547) 
, copy); 

Это поджигатель консоль output..too много рекурсии? какая рекурсия? Я не использую какую-либо рекурсивную функцию в своем коде.

ответ

0

dict.__str__ в большинстве случаев не будет производить правильный json. Используйте модуль json.

Пример:

import json 
... 
req.write(json.dumps(json_root) 

И помните, чтобы установить заголовок Content-Type в application/json (некоторые JavaScript рамки использовать значение заголовка, чтобы определить правильное действие, выполняемое с данными).

+0

json, заданный python cgi, является правильным, я использую его в другом приложении (сетке), и все работает правильно. (Я также использую тот же прокси и хранилище, поэтому я не могу понять, в чем проблема. .) – powder

+0

Вы должны использовать json/simplejson в любом случае, так как '' dict .__ str__'' в очень простых случаях приведет к недопустимому JSON (например, если значение None). Не имею понятия о проблеме с highcharts, я загружал только данные, используя javascript-литералы. – codeape

+0

Хорошо, спасибо, в любом случае, я прочитаю некоторые документы о json сейчас – powder

Смежные вопросы