2011-07-14 17 views
2

是否可以將json字符串直接寫入腳本標記?將json字符串直接寫入腳本標記

我的解決方案:

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元素並在每次想要解析某些JSON時將其插入到DOM中的不必要開銷。你現在這樣做的方式很好,因爲1)如果你的JSON字符串中存在有害的javascript,它將導致一個解析錯誤(JSON只保存數據,並且不能執行命令),2)它保持不變當前範圍內的所有內容。

+0

非常感謝! – Peter

+0

很高興幫助;) – benekastah

相關問題