Записать строку json прямо в тег script - PullRequest
2 голосов
/ 14 июля 2011

Можно ли написать строку json прямо в тег скрипта?

Мое решение:

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

stuffObject = myJsonObject.stuffObject;
delete  myJsonObject.stuffObject;

someObject = myJsonObject.someObject;
delete  myJsonObject.someObject;

Но я думаю, что это немного грязно.Может быть, есть лучшее (более быстрое) решение?

Спасибо!

1 Ответ

1 голос
/ 15 июля 2011

Весь 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 создаст глобальную переменную (по крайней мере, в этом случае) и не будет выполняться в той же области, что и текущий запущенныйfunction.

Не говоря уже о ненужных затратах на создание нового элемента script и вставку его в DOM каждый раз, когда вы хотите выполнить синтаксический анализ JSON.

То, как вы это делаете сейчасэто здорово, потому что 1) если в вашей строке JSON есть вредоносный javascript, это вызовет ошибку синтаксического анализа (JSON только хранит данные и не может выполнять команды) и 2) сохраняет все в текущей области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...