Как я могу выполнить Javascript с помощью вызова ExtJS AJAX без eval (), как я могу с JQuery? - PullRequest
3 голосов
/ 02 декабря 2010

Я хотел бы выполнить javascript на страницах, которые я загружаю через Ext.Ajax.request.Для этого мне нужно загрузить сценарии и eval() их так:

Ext.Ajax.request({
    url: 'content/view_application.php',
    success: function(objServerResponse) {
        var responseText = objServerResponse.responseText;
        regionContent.update(responseText);
        var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
        while(scripts=scriptsFinder.exec(responseText)) {
            eval(scripts[1]);
        }
    }
});

С помощью JQuery, однако, я могу выполнять Javascript на страницах, которые вызываются через AJAX, не прибегая к eval()как это:

function replaceContentOnClick(id, pageToLoad) {
    $('body').delegate(('#' + id), 'click', function(){
        $.get('content/' + pageToLoad, function(data) {
            $('#regionContent .x-panel-body').html(data);
        });
    });
}

Как получается, что JQuery удается выполнить javascript на загруженной странице без eval()?Есть ли способ загрузить javascript, не прибегая к eval() в ExtJS?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2010

Лично я бы не стал беспокоиться о выражении eval.Мне известно, что Дуглас Крокфорд советует против его использования:

eval is evil

Функция eval (и ее родственники, Function, setTimeout и setInterval) предоставляют доступ к компилятору JavaScript,Иногда это необходимо, но в большинстве случаев это указывает на наличие крайне плохого кодирования.Функция eval является наиболее неправильно используемой функцией JavaScript.

(из http://www.jslint.com/lint.html)

Здесь он заявляет, что «это иногда необходимо», и я бы сказал, что вы используетедопустимый.

Библиотека JSON2.js (http://www.json.org) использует эту команду и указывает JSLint, что она предназначена:

/*jslint evil: true */

Есть ли конкретная причина, по которойВы хотели бы избежать его использования?

1 голос
/ 02 декабря 2010

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

1 голос
/ 02 декабря 2010

Хорошо, перейдите к исходному коду jQuery (http://code.jquery.com/jquery-latest.js) и Ctrl + F для globalEval: function. Это функция, которая запускает JavaScript. Вы увидите, что она фактически добавляет теги скрипта в DOM. Что касается extJS, я не не знаю. Попробуйте поискать в их исходном коде «script» или «script», чтобы увидеть, вставляют ли они где-нибудь теги сценария аналогичным образом. Или вы можете просто реализовать свой собственный globalEval.

...