ExtJS 3与Highcharts,加载数据时的JsonStore问题
我正在尝试在一个 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 框架会根据这个头信息的值来决定如何处理数据)。