我使用Thorax(Backbone + Handlebars)开发应用程序,并尝试加载将在模板中使用的外部JSON文件。同时使用Coffeescript。
我的测试JSON数据:
{
"name" : "John Doe"
}
我的模板:
Thorax.templates['space'] = Handlebars.compile """
<h2>Hello, {{name}}.</h2>
"""
我的Ajax调用的成功函数:
success: (json) =>
data = {space: json}
$(app.appContainer).html(@template(data))
整个过程一直有效,直到在模板中实际显示数据。所以我得到的只是你好。 - 我已经尝试按照说明here将JSON数据分配给一个对象,但没有运气。在您提出问题之前,我已经console.log
json
检查JSON数据是否实际上正在通过..它是。
有什么建议吗?
答案 0 :(得分:0)
如果@template(json)
确实是json
对象,则说{ name: 'John Doe' }
应该有效。但看起来你在json
参数中得到一个JSON字符串而不是一个已解析的对象。这可以解释您从console.log
看到的结果,控制台中的输出看起来更像是
console.log("{\n\"name\" : \"John Doe\"\n}")
会产生什么
console.log({"name": "John Doe"})
会产生。
也许您的服务器正在发送带有错误Content-Type的JSON,因此在调用成功处理程序之前,不知道它应该通过JSON.parse
。尝试修复服务器代码以包含Content-Type: application/json
标头;然后你可以说:
success: (json) =>
$(app.appContainer).html(@template(json))
它应该有效。如果你不能这样做,作为最后的手段,你可以自己解析JSON:
success: (json) =>
json = JSON.parse(json)
$(app.appContainer).html(@template(json))