2010-02-06 2 views
2

Я делаю вызов AJAX с jQuery скрипту PHP, который должен вернуть код javascript, встроенный в результат JSON для выполнения jQuery-кода. Как мне пройти код javascript в JSON?Передача javascript-кода в JSON

+0

Ваша библиотека ajax должна иметь поддержку сообщений JSON. Что вы используете? – joejoeson

+5

Вы действительно действительно хотите ввести код? В большинстве случаев некоторые предварительно записанные функции в исходной полезной нагрузке JS в сочетании с некоторыми данными, которые описывают, какая функция запускается с помощью каких аргументов, является лучшей ставкой. – Quentin

+0

Я согласен с Дэвидом и Макс С. ... Хороший вопрос. –

ответ

3

Два способа:

  1. Вы должны передать его в виде строки и использовать eval() на стороне клиента.
  2. Вы можете использовать JSONP, и вместо того, чтобы делать вызов, попросите свой скрипт на стороне клиента вставить <script> с его src, указывая на код на стороне сервера, который возвращает новый скрипт.

В любом случае, убедитесь, что вы его хорошо защищаете - если пользователь может каким-то образом вставить свой собственный код в свой ответ, они могут нанести некоторый урон.

+0

Является ли eval медленнее, чем обычный сценарий? Из обоих ваших предложений, что лучше и почему? – Chetan

+4

JSONP будет немного быстрее и используется чаще, но он открыт для атак XSS, если вы не будете осторожны. Сам я тоже не поеду, а вместо этого передам данные, которые описывают, что мне нужно сделать для какой-либо существующей функции (см. Комментарий Дэвида по вашему вопросу). –

0

Определение JSON не позволяет передавать функции javascript. Он должен быть независимым от языка. Если вы используете парсер JSON, а не eval(), он не будет работать, если JSON содержит какие-либо функции.

Дуглас Крокфорд, который я считаю, придуман термин JSON имеет JSON parser for javascript

Даже JSONP не возвращает функцию, а функция вызова - myFuncIAskedFor({ returned JSON })
Как уже упоминалось, определить свои функции на местном уровне, это самый безопасный вещь
Также используйте анализатор JSON

Смежные вопросы