嗨,我非常擅长使用cherrypy作为fanytree作为前端的后端。
这是代码的fanytree方面:
source: {
url : '/test_data'
},
在樱桃方面,我实现了一个名为test_data的函数
@cherrypy.expose
@cherrypy.tools.json_out()
def test_data(self, **kwargs):
cherrypy.response.headers["Content-Type"] = "application/json"
return '[ {"title":"abc", "folder": true, "key": "1", "children":[ {"title":"b","key":"2"}] }]'
所以我看到请求变成了
'GET /test_data?_=some number...
在浏览器上,我看到我的返回对象,但检查失败了:
if (typeof data === "string") {
$.error("Ajax request returned a string (did you get the JSON dataType wrong?).");
}
我在某处读到你需要内容类型为json,但我已经拥有了。我错过了什么?
答案 0 :(得分:1)
内容类型正常,但您返回的字符串无效json(例如,键必须用双引号括起来)。 我建议您将数据准备为dicts列表,然后使用' json.dumps()'转换为JSON。 (也许json_out工具做的相同,但我猜想即使这样你也应该返回一个dicts列表而不是字符串。)
答案 1 :(得分:1)
CherryPy JSON输出工具cherrypy.tools.json_out
负责MIME并将您的数据转换为JSON字符串。因此,如果您使用它,该方法应如下所示:
@cherrypy.expose
@cherrypy.tools.json_out()
def test_data(self, **kwargs):
return [{
"title" : "abc",
"folder" : True,
"key" : 1,
"children" : [{"title": "b", "key": 2}]
}]
否则,如果你想自己做,那就是:
import json
@cherrypy.expose
def test_data(self, **kwargs):
cherrypy.response.headers["Content-Type"] = "application/json"
return json.dumps([{
"title" : "abc",
"folder" : True,
"key" : 1,
"children" : [{"title": "b", "key": 2}]
}])
然后确保您已重新启动CherryPy应用,并查看Web开发人员工具或FireBug网络标签以验证响应标头和内容。