Загрузка javascripts в обратных вызовах ajax - PullRequest
0 голосов
/ 27 апреля 2010

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

Я использовал следующий код для загрузки необходимых js-файлов при обратном вызове с помощью сценария <head>. У меня до сих пор не было проблем, но мне было интересно, если это безопасный и надежный подход (особенно кросс-браузер).

function ajax_callback(response) {
    document.getElementById('dom_id_to_update').innerHTML = response;
    import_js('/path/to/js/file/');
}

function import_js(src) {
    var scriptElem = document.createElement('script');
    scriptElem.setAttribute('src',src);
    scriptElem.setAttribute('type','text/javascript');
    document.getElementsByTagName('head')[0].appendChild(scriptElem);
}

Спасибо, Брайан

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Не похоже, что вы используете jQuery, что очень плохо, потому что есть функция live, которая специально работает с этим случаем. Функция live присоединяет обработчик ко всем элементам, которые соответствуют селектору сейчас и в будущем. Поэтому независимо от того, когда ваши новые элементы будут добавлены на страницу, обработчик будет автоматически присоединен, без необходимости загружать новые сценарии.

Документацию и примеры можно посмотреть здесь: http://api.jquery.com/live/

1 голос
/ 27 апреля 2010

Да. Вы даже можете удалить элемент script сразу после его добавления (хотя вы можете захотеть сохранить его во избежание повторной загрузки позже - например, посмотрев, какие теги script находятся в head); очевидно, просто добавление этого - все, что требуется для загрузки и анализа кода. Подробнее здесь (эта страница взята из неофициальной вики Prototype, но она применима независимо от того, используете ли вы Prototype).

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