Как достучаться до фукции .. AJAX

 
0
 
JavaScript
ava
Esco | 20.07.2007, 12:57
Проблема такая -
получаю страницу Ajax запросом.
на полученной странице, например, имеется

<script language="Javascript">
function test() { alert('test'); }
</script>

<img src="bbb.gif" onClick="javascript: test()">

не работает! smile

вопрос - как получить доступ к функциям на страницах получаемых Ajax запросами?
Comments (10)
ava
Mymik | 20.07.2007, 12:21 #
сделать им eval <<-- преобразование строки в JavaScript
ava
Aliance | 20.07.2007, 13:41 #
Цитата (Mymik @ 20.7.2007, 13:21 findReferencedText)
сделать им eval <<-- преобразование строки в JavaScript

не удачный совет.

код показать можешь?
ava
Esco | 20.07.2007, 16:38 #
Нашел... может кому пригодится...

Как подгрузить javascript с помощью ajax
Долго сидел с этой проблемой, точнее не с ней самой, а с виджетом Dojo, который хотел запустить… виджет так и не запустил, но конкретно проблему с подгрузкой javascript решил.

И так, проблему можно решить 2я путями:

1) Можно создать с помощью DOM новый элемент . Пример структуры DOM следующий:

var head = document.getElementsByTagName("head")[0];
script = document.createElement('script');
script.id = 'uploadScript';
script.type = 'text/javascript';
script.src = "../path/script.js";
head.appendChild(script);За пример спасибо Sam’у.

При этом все выполняемые скрипты нужно выкладывать в отдельный файл, что не всегда хорошо.

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

Принцип следующий - при загрузке новых данных при помощи ajax необходимо парсить их на наличие тега “script”, если он есть, то все значение этого тега обрабатываем при помощи eval(value); Эта функция выполняет javascript код.

added later:
А у кого есть пример как правильно парсить респонс и обрабатывать eval ?
ava
MisterCleric | 20.07.2007, 17:36 #
а чего ты полез в такие дебри?
смотри как выходит просто:

window.test = function () {alert('test'); }


любые объявления глобальных функций сетяться объекту window.
А Dojo может скрипты только выполнить, но не создать.
А таким образом мы их обманули: объекту window присвоили новое свойство типа function поскольку window глобальный, то это свойство начинает быть везде видимым. Как только эта функция тебе не нужна говоришь так:

delete window.test;
ava
Aliance | 20.07.2007, 18:32 #
Цитата (MisterCleric @ 20.7.2007, 18:36 findReferencedText)
delete window.test;

что-то новое? не помню такого.
ava
Burrr | 20.07.2007, 18:46 #
Aliance, delete - это хорошо забытое старое, а не новое ;)
ava
Esco | 20.07.2007, 23:21 #
нет -так не работает. Речь идет о результате полученным Ajax запросом.
Нашел вот еще одно решение

new Ajax.Updater({ success: 'items' }, '/items', {
parameters: { text: $F('text') },
evalScripts: true,
insertion: Insertion.Bottom });
ava
SamDark | 21.07.2007, 13:39 #
Ну, тут вообще может быть всего два пути:
1. Без собственного парсера. т.е. eval() и варианты вроде динамической вставки и выполнения (ничем, кстати, не лучше).
2. Собственный парсер (возможно собственного формата). Так с самого начала всё и задуымвалось в связке с XML.

Путь 1 лёгкий, опасный.
Путь 2 трудоёмкий, относительно безопасный.
ava
ksnk | 21.07.2007, 14:26 #
Цитата (SamDark @ 21.7.2007, 13:39 findReferencedText)
Путь 1 лёгкий, опасный.

Чем опасен первый путь? Скрипт будет подгружать собственные данные с собственного сервера! Разве это опаснее, чем просто зайти на это сервер броузером?
ava
SamDark | 21.07.2007, 16:18 #
ksnk,
Не опаснее, если данные на сервере проверяются.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit