Что эквивалентно, но более идиоматично для eval () в jQuery?

Что эквивалентно выполнению этого вызова eval('('+responseText+')') в jQuery? Я также понимаю, что eval это не так безопасно, поэтому я ищу что-то более безопасное и более идиоматичное в jQuery.

Ответов (5)

По замыслу jQuery призван улучшить реализацию браузеров. Поскольку нет проблем с реализацией различных браузеров eval, jQuery не решает их.

Вы действительно хотите выполнить код Javascript (который всегда будет в некоторой степени небезопасным) или вы пытаетесь преобразовать JSON из строки в объект?

В первом случае eval () по-прежнему будет вашим лучшим выбором.

В последнем случае jQuery сделает это за вас как часть запроса AJAX, или вы можете использовать специальный подключаемый модуль JSON для преобразования между строкой и объектом без риска выполнения произвольного кода.

Я не думаю, что это правда, что нет различий в браузерах. Я только что наткнулся на одну сегодня. Если вы оцениваете строку, которая вызывает метод для несуществующего объекта, Firefox возвращает undefined, а IE6 выдает ошибку TypeError.

$.globalEval()?

http://api.jquery.com/jQuery.globalEval/

В документации говорится, что он ведет себя совершенно иначе eval(), но это наиболее близкое совпадение, если вы хотите передать свои оценки через jQuery.

а) Чтобы загрузить и выполнить код JS:

$.getScript( url, [ success(data, textStatus) ] )

см. http://api.jquery.com/jQuery.getScript/

б) Чтобы разобрать JSON:

$.parseJSON( json )

см. http://api.jquery.com/jQuery.parseJSON/