我遇到一个问题,显示一个jQuery模板,其中JSON直接写入HTML,然后在加载时传递给jquery模板以呈现屏幕的一部分。
我有一个加载模板的简单函数:
function templateLoader(templateID, containerID, serializedData) {
var json = $.parseJSON(serializedData);
$("#" + templateID).tmpl(json).appendTo("#" + containerID);
};
这是失败的,说JSON无效。这是调用者的样子:
<script type='text/javascript'>
jQuery(function () {
templateLoader('questionTemplate',
'questionContainer',
'[{"ID":1,"Text":"something with an escaped \"double quote\" and a single quote does the unicode version\u0027s end of string"}]');
});
</script>
JSON是通过调用JavaScriptSerializer.serialize()生成的,并在ASP.NET MVC视图中输出&lt;%= JavaScriptSerializer.serialize(model.questions)%&gt;
JSON本身传递了各种JSON验证测试。
据我所知,javascript本身正在转义双引号,为了调用jQuery的parseJSON()而将双引号保留为裸。
我的问题是哪里可以解决这个问题?我应该发布处理JavaScriptSerializer序列化调用以添加额外的转义或从转义转换为执行&amp; quot;替代品?这似乎是一个更常见的问题。
答案 0 :(得分:3)
如果您正在嵌入它,为什么要使用JSON或JSON.parse
?为什么不只是文字:
templateLoader('questionTemplate',
'questionContainer',
[{"ID":1,"Text":"something with an escaped \"double quote\" and a single quote does the unicode version\u0027s end of string"}]);
显然,您必须相应地修改templateLoader
。您可以将serializedData
更改为json
(除了该名称具有误导性,因为json
实际上是一个数组,不是一个JSON字符串),然后删除第一个功能线。
答案 1 :(得分:3)
(对于那些与同一问题作斗争的人)
使用HttpUtility.JavaScriptStringEncode
您的服务器代码将变为
<%= HttpUtility.JavaScriptStringEncode(JavaScriptSerializer.serialize(model.questions)) %>
答案 2 :(得分:1)
你能试试吗?
<script type='text/javascript'>
jQuery(function () {
templateLoader('questionTemplate',
'questionContainer',
'[{"ID":1,"Text":"something with an escaped \\\"double quote\\\" and a single quote does the unicode version\u0027s end of string"}]');
});
</script>