将json字符串直接写入脚本标签
Posted
技术标签:
【中文标题】将json字符串直接写入脚本标签【英文标题】:Write a json string direct into the script tag 【发布时间】:2011-10-05 03:42:57 【问题描述】:是否可以直接将json字符串写入script标签?
我的解决方案:
myJsonObject = jQuery.parseJSON(' *json string* ');
stuffObject = myJsonObject.stuffObject;
delete myJsonObject.stuffObject;
someObject = myJsonObject.someObject;
delete myJsonObject.someObject;
但我认为它有点脏。是否有更好(更快)的解决方案?
谢谢!
【问题讨论】:
【参考方案1】:所有 JSON 都是有效的 javascript(但并非总是相反)。
// These two lines are equivalent
var someObject = a: 'a', b: 'b' ;
var someObject = jQuery.parseJSON(' "a": "a", "b": "b" ');
如果您从请求中获取 JSON 字符串到外部资源,我认为您目前正在做的是最好的方法。您可以将 JSON 插入到一个新的 script
元素中,如果您真的想要的话,就像这样:
var $body = $(document.body);
$body.append("<script type='text/javascript'>var myJsonObject = " + jsonString + ";</script>");
我个人认为这看起来不太干净,但这种方法还有一些其他问题。如果黑客能够将他/她自己的 javascript 放入您的网站返回的一些 JSON 响应中,那么有害的 javascript 将在您的网站上运行,可能会对您的网站造成严重破坏并使您感到尴尬。 (出于同样的原因,您不应该使用eval(jsonString)
。)
其次,javascript 会创建一个全局变量(至少在这种情况下),并且不会在与当前运行的函数相同的范围内执行。
更不用说创建一个新的script
元素并将其插入到 DOM 中每次你想要解析一些 JSON 的不必要的费用。
你现在的做法很棒,因为 1)如果你的 JSON 字符串中有有害的 javascript,它会导致解析错误(JSON 只保存数据,不能执行命令)和 2)它会保留所有内容在当前范围内。
【讨论】:
以上是关于将json字符串直接写入脚本标签的主要内容,如果未能解决你的问题,请参考以下文章