2010-04-19 1 views
2

JSON - отличный способ передать сложные данные из моего кода на стороне сервера на клиентскую версию JavaScript. Например, в PHP я могу написать:Использует передовые конструкции (функции, новые, вызовы функций) в безопасном JSON?

<script type="text/javascript> 
    var MyComplexVariable = <?= BigFancyObjectGraph.GetJSON() ?>; 
    DoMagic(MyComplexVariable); 
</script> 

Это очень здорово, но иногда вы хотите передать более чем основная дата, как даты или даже определение функций. Существует простой и простой способ сделать это тоже, как:

<script type="text/javascript> 
    var MyComplexVariable = { 
     'SimpleProperty' : 42, 
     'FunctionProperty' : function() 
     { 
      return 6*7; 
     }, 
     'DateProperty' : new Date(989539200000), 
     'ArbitraryProperty' : GetTheMeaningOfLifeUniverseAndEverything() 
    }; 
    DoMagic(MyComplexVariable); 
</script> 

И это работает как шарм во всех браузерах я видел до сих пор. Но в соответствии с JSON.org такой синтаксис недействителен. С другой стороны, я видел, что этот синтаксис используется в очень многих местах, включая некоторые популярные рамки JavaScript. Итак ...

Могу ли я ожидать каких-либо проблем, если я использую «неподдерживаемые» функции JSON, такие как выше? Почему это неправильно или нет?

Добавлены уточнение: Если я ожидал мой JSON потребляться каким-то неизвестное программным обеспечением 3 партии, или даже известный анализатор, который не был браузером, то такая экзотика бы действительно, скорее всего, не работает, и я бы не пытаться для их внедрения. Но меня интересует случай, когда код JSON написан непосредственно внутри кодового блока JavaScript, который выполняется интернет-браузером. Как и вышеприведенные примеры.

ответ

2

Согласно json.org, объект JSON поддерживает только следующие элементы стоимости объекта:

alt text http://json.org/value.gif

Поскольку ни один из них не является функцией, я бы предложил не использовать его так, как вы сказал, что он официально не поддерживается в спецификации.

Кроме того, что происходит, когда клиент, не являющийся Javascript (например, программа Python), пытается использовать ваш JSON? Как это будет запускать ваш JavaScript-код?

+0

Если бы я использовал его только для данных, где целевой парсер скорее всего не был бы браузером, то я бы согласился с вами. Но я спрашиваю о сценарии, в котором я встраиваю JavaScript непосредственно в код моей клиентской части JavaScript. Он будет выполнен браузером. –