ExtJS 3与Highcharts,加载数据时的JsonStore问题

0 投票
1 回答
854 浏览
提问于 2025-04-17 00:19

我正在尝试在一个 EXTJS 3 窗口中使用 Highcharts 绘制一些数据。使用固定的数据数组时一切正常,但我需要绘制从 Python CGI 获取的数据,这些数据以 JSON 格式返回。这是 Python CGI 创建我数据的方式(我省略了连接数据库的部分等):

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

这是我尝试加载这些数据的 JavaScript 代码:

        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'},
                        ]
            })
    });

然后我创建了窗口和图表。现在有两个问题:第一个问题比较简单:这段代码有什么问题?Firebug 控制台显示:

o 是未定义的

if(o.metaData){

这个错误出现在 ext-all-debug.js 的第 26042 行,这是我在 HTML 头部包含的调试脚本之一。窗口已经创建,但里面当然没有图表。这是什么错误呢?如果我用大块注释掉代理和存储的创建,错误就消失了,所以问题应该出在这里。编辑:我解决了这个问题,我用错了加载存储的函数……我用的是 jstore.loadData() 而不是 jstore.load(),是我的错……抱歉。

第二个问题是:下面这段代码是从 jsonstore 中用 Highcharts 绘制数据的正确方法吗?(我们在创建图表的过程中,我不贴完整代码,因为它能正常工作,可能贴出来也没用)

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

非常感谢任何回答!

编辑:在我修复数据加载后出现了新问题:

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

这是 Firebug 控制台的输出……是不是递归太多了?什么递归?我在代码中没有使用任何递归函数……

1 个回答

0

dict.__str__ 在大多数情况下不会生成正确的 JSON 格式。建议使用 json 模块。

举个例子:

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

另外,记得把 Content-Type 这个头信息设置为 application/json(有些 JavaScript 框架会根据这个头信息的值来决定如何处理数据)。

撰写回答