将 jquery.parseJSON 与 JavaScriptSerializer 一起使用(如何获得双引号转义)
我在显示 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() 生成的,并通过 <%= JavaScriptSerializer.serialize(model.questions) %> 在 ASP.NET MVC 视图中输出。
JSON 本身通过了各种 JSON 验证测试。
我知道 javascript 本身正在转义双引号,使双引号裸露在调用 jQuery 的 parseJSON() 上。
我的问题是哪里最好解决这个问题?我是否应该对 JavaScriptSerializer 序列化调用进行后处理以添加额外的转义或从转义更改为执行 " 操作?替代品?这似乎是一个更常见的问题。
I've run into a problem displaying a jQuery template where the JSON is written directly into the HTML, and then passed to jquery templates on load to render a part of the screen.
I have a simple function that loads the template:
function templateLoader(templateID, containerID, serializedData) {
var json = $.parseJSON(serializedData);
$("#" + templateID).tmpl(json).appendTo("#" + containerID);
};
This is failing, saying the JSON is invalid. Here's what the caller looks like:
<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>
The JSON is produced by a call to JavaScriptSerializer.serialize() and output in a ASP.NET MVC view with <%= JavaScriptSerializer.serialize(model.questions) %>
The JSON itself passes the various JSON validation tests.
I understand that javascript itself is escaping the double quotes, leaving the double quotes naked for the call to jQuery's parseJSON().
My question is where best to fix this? Should I post process the JavaScriptSerializer serialize call to add additional escaping or change from escaping to doing " replacements? This seems like it would be a more common problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果要嵌入它,为什么还要使用 JSON 或 JSON.parse?为什么不只是文字:
显然,您必须相应地修改
templateLoader
。您可以将serializedData
更改为json
(除了该名称具有误导性,因为json
实际上是一个数组,不是 JSON 字符串),然后删除函数的第一行。If you're embedding it, why use JSON or
JSON.parse
at all? Why not just literals:Clearly, you have to modify
templateLoader
accordingly. You can changeserializedData
tojson
(except that the name is misleading, sincejson
is actually an array, not a JSON string), then delete the first line of the function.(对于那些遇到同样问题的人)
使用
HttpUtility.JavaScriptStringEncode
你的服务器标签将变得像
(for some one who fighting the same issue)
Use
HttpUtility.JavaScriptStringEncode
Your server tag will become like
你能试试这个吗?
Can you try this?