powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
11 сообщений из 11, страница 1 из 1
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36161398
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
При использовании AJAX, столкнулся с тем, что, если на возвращаемой в асинхронном ответе странице присутствуют скрипты в виде тегов <script>...</script> то они не выполняются.

Это такая особенность работы скриптов, либо есть какая то возможность их выполнить после загрузки?
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36161838
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,

Они выполняются (!всегда по мере появления на странице). Проверь, пожалуйста, а если чего не работает - давай сюда и поподробнее.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36161862
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, понял (подозреваю) в чём дело. Кусочек кода давай.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36161959
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeА, понял (подозреваю) в чём дело. Кусочек кода давай.

Использую для AJAX библиотеку prototype-1.6.0.3.
На странице, после того как она загрузилась в браузере, кликаю на кнопку, вызываю обработчик:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function onClickSomeButton() {
   // адрес контроллера на сервере, который возвращает асинхр. ответ
   var url = "http://localhost:8080/someController";  

   // идентификатор div, в который помещается асинхр. ответ
   var dynamicDivId = "someDynamicDivId";   

   var ajax = new Ajax.Updater(
    {
        success: dynamicDivId     // передаю аджакс апдейтеру этот идентификатор div
    }, url, {
        method:"post"
    }
}

Так вот, асинхронный запрос потом поступает на сервер по адресу var url = "http://localhost:8080/someController"; , который возвращает такой фрагмент HTML-кода:
Код: plaintext
1.
2.
3.
<h1>async response</h1>
<script>alert("hello");</script>
<div>some data...</div>

Этот фрагмент помещается внутрь div, указанного в переменной var dynamicDivId = "someDynamicDivId";
Ответ приходит и помещается успешно.
Но вот функция в тегах <script> не выполняется.

Если выполнить обычный запрос к контроллеру var url = "http://localhost:8080/someController"; ,
то функция в <script> выполняется.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162043
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,

Беру слова обратно (насчёт "догадываюсь" - о другом подумал).
Всё должно работать. Только не понятно, что такое "фрагмент помещается внутрь div"? Я, надеюсь, типа аппендЧилд, а не присваиванием иннерХТМЛ, что есть неправильно.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162105
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeТолько не понятно, что такое "фрагмент помещается внутрь div"? Я, надеюсь, типа аппендЧилд, а не присваиванием иннерХТМЛ, что есть неправильно.

Не могу ничего сказать по этому поводу, этим занимается функция
Код: plaintext
1.
2.
3.
4.
5.
6.
var ajax = new Ajax.Updater(
    {
        success: dynamicDivId     // передаю аджакс апдейтеру этот идентификатор div
    }, url, {
        method:"post"
    }

Надо глянуть в исходники её.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162152
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё. Разобрался почему!

Оказывается в prototype по-умолчанию Ajax.Updater фильтрует скрипты ( Вот тут об этом сказано ).
Чтобы мой пример заработал, достаточно добавить в функцию параметр evalScript: true
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162154
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage,

Подозреваю, что там - присваивание, поэтому и не работает. Может я и вру, потому что не пользовался прототипом.
Можно попробовать ручками написать аппендЧилд.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162163
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeunicornmirage,

Подозреваю, что там - присваивание, поэтому и не работает. Может я и вру, потому что не пользовался прототипом.
Можно попробовать ручками написать аппендЧилд.

Заглянул внутрь prototype, там есть такая строка в фрагменте, где как раз происходит обновление содержимого дива:
Код: plaintext
1.
if (!options.evalScripts) responseText = responseText.stripScripts();

Я так понимаю - там просто все элементы <script> просто фильтруются.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162166
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageВсё. Разобрался почему!

Оказывается в prototype по-умолчанию Ajax.Updater фильтрует скрипты ( Вот тут об этом сказано ).
Чтобы мой пример заработал, достаточно добавить в функцию параметр evalScript: true
Это - замечательно, что всё стало ясно. На то и форум.
...
Рейтинг: 0 / 0
Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
    #36162188
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

да, спасибо за участие
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Ajax: подгрузка JS-скриптов. Как сделать чтобы они выполнились?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]