将json字符串直接写入脚本标记

时间:2011-07-14 08:39:15

标签: jquery json parsing dom object

是否可以直接将json字符串写入脚本标记?

我的解决方案:

myJsonObject = jQuery.parseJSON(' *json string* '); 

stuffObject = myJsonObject.stuffObject;
delete  myJsonObject.stuffObject;

someObject = myJsonObject.someObject;
delete  myJsonObject.someObject;

但我觉得它有点脏。是否有更好(更快)的解决方案?

谢谢!

1 个答案:

答案 0 :(得分: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元素并在每次要解析某些JSON时将其插入DOM中的不必要的花费。

你现在这样做的方式很棒,因为1)如果你的JSON字符串中存在有害的javascript,它将导致解析错误(JSON只保存数据,不能执行命令)和2)它保留所有内容在目前的范围内。