我使用Node.js (带有Express.js)将JSON数据对象从服务器传递到客户机视图。
当我将JSON对象直接呈现到视图中时,我会得到页面上显示的JSON对象(这是有效的):
pageprovider.findAllTag( function(error, pages){
res.send(pages);
})
我的输出如下所示(大得多,很多是嵌套的obj)
{"green":{"title":"green","pagesContaining": ""}}
当我尝试将它传递给我的Jade View时,如下所示:
pageprovider.findAllTag( function(error, tagsJSONObj){
//res.send(pages);
pageprovider.findAll( function(error, pages){
res.render('search_tags.jade', { locals: {
title: 'Search by Tags',
'pages': pages,
tagsJSON: JSON.stringify(tagsJSONObj) //pass the tags data as a JSON obj
}
});
}) //pageprovider.findAll
}) //pageprovider.findAllTag
The problem
当我将'tagsJSON‘传递给视图时,输出包括html实体:
var obj = jQuery.parseJSON( "{"name": 'value'}");
JQuery抛出一个错误,因为它不喜欢'"‘。我怎样才能让Node给我正确的引号,或者让jQuery接受这种格式?
有什么想法吗?
发布于 2012-06-22 06:13:45
这是因为当你打电话给
res.render('search_tags.jade', { locals: {
title: 'Search by Tags',
'pages': pages,
tagsJSON: JSON.stringify(tagsJSONObj) //pass the tags data as a JSON obj
}
});
search_tags.jade
是用来输出超文本标记语言的,所以它会对你的引用进行编码。您应该使用不支持HTML转义的渲染器,或者至少更改视图,使参数不是HTML编码的
如果不想对输出中的某些内容进行转义,可以在视图中使用!{tagsJSON}
。但是,在输出JSON时,不需要视图。您可以只获取您的对象,调用JSON.stringify
。我不使用JADE,所以我不确定是否有一种方法可以创建只调用JSON.stringify()
的视图,但这就是我在JSP、velocity、ASP和Code Igniter中所做的(不使用JSON.stringify
,而是使用针对给定语言的JSON工具)
发布于 2012-11-17 17:01:36
在ejs中,它的<%- tagsJSON %>
^ <---- Note the "-"
发布于 2014-03-08 02:33:49
使用Swig.js时更好的解决方案
{{ data|json|raw }}
https://stackoverflow.com/questions/11147468
复制相似问题