是否可以直接将json字符串写入脚本标记?
我的解决方案:
myJsonObject = jQuery.parseJSON(' *json string* ');
stuffObject = myJsonObject.stuffObject;
delete myJsonObject.stuffObject;
someObject = myJsonObject.someObject;
delete myJsonObject.someObject;
但我觉得它有点脏。是否有更好(更快)的解决方案?
谢谢!
答案 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)它保留所有内容在目前的范围内。