| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > AJAX и внедренные <script> |
| Автор: kkorsakoff 10.8.2006, 21:57 |
| Использую AJAX, с его помощью подгружаю и устанавливаю новое содержимое некоторого <div>'a. Хочу установить вызов некоторой функции по таймеру (setTimeout(...)), но оказывается если внедрять <script> внутри нового подгружаемого html'a, то он не работает. То есть не запускается вообще. Похоже можно только в "основной" странице вставлять скрипты. Может у кого-то была похожая проблема и/или есть её решение? |
| Автор: JSman 11.8.2006, 23:22 |
| у меня даже регулярные выражения отказывались работать во внедренной странице.... попробуй так. пусть таймер есть в главном окне, а ссылку на функцию нового контента передавай по событию загрузки. код нужен? |
| Автор: Red Wind 12.8.2006, 00:28 |
| Не помешало бы |
| Автор: JSman 13.8.2006, 23:02 | ||
| да.. при AJAX'е не фига скрипт не пашет... эти вообще AJAX легко заменяется стандартными средствами JSCRIPT и DHTML. я предлагаю решить тебе проблему, пользуясь IFRAME
|
| Автор: Sardar 14.8.2006, 02:01 |
| JSman, ну зачем же IE only писать, если скрипт тривиален? Также пользование ифреймов это лишние щелчки в ИЕ и пожирание памяти в лисе. kkorsakoff, "вставлять скрипты" никуда нельзя, по крайней мере в Opera 9 и NN 7 с этим должны быть проблемы (не должны выполнять). Вообще всё это на вид кажеться очень диким, лучше бы задачу выложил, порешали бы менее криво. Ну а для изврата конечно же всегда существует eval, передаём тело полученного скрипта. |
| Автор: JSman 14.8.2006, 17:13 |
да, это лучше решение, чем мой ие-код |
| Автор: JSman 14.8.2006, 17:40 |
| тот код был использован в моем проекте по отслеживанию событий и тд, и подумал может кому-то понадобится в решении задач. |
| Автор: vasac 15.8.2006, 10:21 | ||
А зачем с помощью аякса подгуржать js-файл, потом пихать его в eval(), когда для подключения внешних сценариев есть стандартное средство — элемент <script>?
Дальше остается только поймать момент полной загрузки сценария. |
| Автор: Avb 15.8.2006, 15:08 | ||||
| В библиотеке prototype.js есть класс Ajax.Updater. При его использовании скрипты javascript работают. Но нужно учитывать следующее: Выдержка из документации библиотеки prototype.js: If your server logic returns JavaScript code along with HTML markup, the Ajax.Updater object can evaluate that JavaScript code. To get the object to treat the response as JavaScript, you simply add evalScripts: true; to the list of properties in the last argument of the object constructor. But there's a caveat. Those script blocks will not be added to the page's script. As the option name evalScripts suggests, the scripts will be evaluated. What's the difference, you may ask? Lets assume the requested URL returns something like this:
In case you've tried it before, you know it doesn't work. The reason is that the script block will be evaluated, and evaluating a script like the above will not create a function named sayHi. It will do nothing. To create this function we need to change our script to create the function. See below.
Note that in the previous example we did not use the var keyword to declare the variable. Doing so would have created a function object that would be local to the script block (at least in IE). Without the var keyword the function object is scoped to the window, which is our intent. Полный текст: http://www.sergiopereira.com/articles/prototype.js.html Думаю здесь описывается твоя проблема. Если проблема в другом, то пользуй Ajax.Updater из prototype.js или посмотри как сделано у них то, что не работает у тебя. |
| Автор: Sardar 15.8.2006, 16:16 |
| Avb, в prototype.js все скрипты вырезаються, затем полученная вёрстка ставиться в innerHTML и после все скрипты по eval'у выполняються все разом. |
| Автор: Avb 15.8.2006, 17:50 | ||
Sardar, спасибо за разъяснения. Но, честно говоря, я не понял какой-из этого следует вывод? Использование prototype.js не решит проблему kkorsakoff-а? |
| Автор: kkorsakoff 28.8.2006, 12:57 |
| Спасибо, это решение помогло бы мне. Единственное, что я попросту решил задачу перепостановкой оной |
| Автор: kkorsakoff 28.8.2006, 22:57 |
| Нет, на самом деле для определения новых функций для последующего их вызова по onclick:) Писать все в onclick="...." громоздко, а в <script> бразуер эти функции не видел (в чем собственно и был мой вопрос |
| Автор: Sardar 28.8.2006, 23:16 |
Странно, это как? Подзагрузка таких динамических скриптов как предложил vasac, должно и будет работать, собственно на этом "псевдо аякс"/JSON и построен. |
| Автор: kkorsakoff 29.8.2006, 11:44 | ||
| Сорри, но кто такой vasac и что он тут предлагал? Почему странно? Все в начале согласились, что "обычные" скрипты не работают. То есть, я аяксом подгружаю примерно такой html и назначаю его некоторому div'у как innerHtml
Так вот, executeThis() не выполняется. Браузер просто не знает о существовании этой функции. Напомню, что это и было причиной открытия моей темы. Так же напомню, что проблема была решена в итоге дискуссий в этом топике, за что всем спасибо |
| Автор: vasac 29.8.2006, 12:25 |
| kkorsakoff, кто-такой vasac это к делу не относится. А предложить он может, просмотреть тему с самого начала и внимательно. |
| Автор: kkorsakoff 30.8.2006, 14:51 |
| Пропустил Ваше сообщение, за что извиняюсь. Да, это тоже интересно. На сем можно считать тему закрытой и вопрос решенным. |