| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Как выполнить в подгружаемом файле js код? |
| Автор: DeMONiZ 15.4.2010, 05:30 | ||||
| Здавствуйте! Проблема такова, или даже не проблема а вопрос. есть код
и подгружаемая страница с js ( наш файл.php)
Нужно каким нибудь методом образом сделать чтоб этот алерт выполнялся и выводилось сообщение...... Какие будут соображения? |
| Автор: EmilRegis 15.4.2010, 05:42 |
| а чем alert(text); не устраивает? |
| Автор: DeMONiZ 15.4.2010, 10:12 | ||
Что вы имеее ввиду, возможно вы не поняли вопрос. Опишу все подробнее. Есть php страница она подргружается аяксом (скрипт выше) через setInterval c частотой в 1 секунду. Это нужно для того чтобы видеть изменения информации без перезагрузки страницы. Когда соответствующая информация на странице удовлетворит условие мне нужно выести текст алертом так сказать оповестить пользователя о том что условие удовлетворяется. JS код на подгружаемой стрнице не выполняется и нужно сделать чтоб он выполнялся. |
| Автор: EmilRegis 15.4.2010, 11:47 | ||||
Ну вообще говоря думаю php не подгружается, а выполняется на сервере...а то, что php выплёвывает в виде echo - возвращается в callback - функцию...поэтому думаю правильно будет в php написать условие и выплёвываемый результат
а в callback выводить уже алерт
|
| Автор: skyboy 15.4.2010, 12:14 |
| у jQuery есть метод http://api.jquery.com/jQuery.getScript/, можешь использовать или посмотреть, как там реализовано. но, если ты планируешь, что этот подгружаемый скрипт будет перестраивать что-то на твоей странице, которая этот скрипт подгружает, я бы все же рекомендовал передавать только данные(XML, json, простой текст), так, чтоб решение о замене/удалении блоков принимал один и тот же код на основании пришедших данных. а не загружаемое творило, что "придет в голову". проще контролировать все же. |
| Автор: DeMONiZ 15.4.2010, 12:15 | ||
| Данное ршение не подойдет, у меня данных много вывдится. Привожу пример: выводится из базы циклом информация в таблице например 15 разных имен
Первая ячейка содежит имя вторая время. в цикле есть условие если время текущее совпадает с временем выводимым из базы то и должен выходить alert |
| Автор: DeMONiZ 15.4.2010, 12:43 |
| Правильно сформулировать надо так "Подгрузка через AJAX HTML-кода, содержащего JavaScript" |
| Автор: EmilRegis 15.4.2010, 12:49 | ||
может всё таки кесарю кесарево, а джаваскрипту джаваскриптовое?
то есть получаете дажнные с сервера и уже в скрипте их обрабатываете как надо...в чём проблема то? или если у вас что-то специфичное, то приведите более подробный пример Добавлено через 6 минут и 53 секунды если всё правильно понял, то надо просто в коллбек-функции пройтись по таблице и сравнивать текущее время с тем, что в ячейке таблицы, а если произошло совпадение - то выводить алерт, пришедший от сервера |
| Автор: DeMONiZ 15.4.2010, 13:01 |
| Что то вроде этого я имел ввиду: http://www.realcoding.net/articles/podgruzka-cherez-ajax-html-koda-soderzhashchego-javascript.html |
| Автор: DeMONiZ 15.4.2010, 13:26 |
| Осталось только грамотно внедрить их код в мой..... |
| Автор: cha0t1k 15.4.2010, 13:33 |
| Что Вас ограничивает использовать методы jquery get() post() ? Они корректно подгружают в пространство имен весь джаваскрипт в тегах <script> в получаемом через AJAX HTML. Но с некоторыми проблемами столкнетесь. Из этого джаваскрипта будет недоступен весь джаваскрипт более верхнего уровня. Но вообще это плохая практика. Лучше получать чистый JS, либо чистый HTML. А для серьезных клиентских приложений практика получения AJAX'ом HTML'а не подходит. Лучше JSON. |
| Автор: DeMONiZ 15.4.2010, 13:46 |
| cha0t1k а пример можно чтоб работал с моим выше представленом коде? чтоб брал регуляркой вырезал весь код между <script> </script> обрабатывал его и засовывал в head. сейчс мне не важно как мне важно чтоб работало потому что времени осталось часа 2 на ешение этой проблемы у самого не выходит... |
| Автор: cha0t1k 15.4.2010, 13:51 |
| Я так подгружал HTML используя jquery. И больше стараюсь так не делать. Когда проект разрастается, сложно поддерживать. Сейчас пишу с разделением логики и представления клиентскую часть. Если надо решить быстро, просто заюзай jquery. За два часа ты успеешь разобраться как работать в нем с AJAX. http://jquery.com |
| Автор: IDVsbruck 15.4.2010, 14:12 | ||
| Не стал подробно читать все посты, но так понял, что проблема не решена и она заключается в том, что скрипт, подгруженный динамически, автоматом не подгружается. Уже давно пользуюсь jQuery, там это уже решено и отлично работает, но покопался в архивах и нашел старую реализацию:
Это callback запроса. Если в ответе сервера встречается script, то он должен выполниться. |
| Автор: DeMONiZ 15.4.2010, 14:35 |
| А пример работы этой функции есть? что то у меня не работает.....(( |
| Автор: DeMONiZ 17.4.2010, 10:59 | ||
сделал такую функцию
алерты стали работать, а вот сетинтервал если попался на подгржаемой станице то он не выполняется подскажите почему? и как этого избежать? |
| Автор: DeMONiZ 17.4.2010, 12:24 | ||||
Подгружающий код:
и подгржаемый код:
если запустить код go.php все работает. если подгржать аяксом не работает. Может быть я и не прав но мне кажется что в результате код просто не видит <span id='ti".$j."'> и собственно не может менять содержимое блока. Может как то надо зарегистрировать объект или еще что нибудь кто знает? |
| Автор: Любитель 18.4.2010, 21:44 | ||
| Выполняется твой скрипт (я не проверял - но предполагаю). Проблема в том, что d у тебя вовсе не глобальная переменная, а setInterval, если ему передать строку - будет эвалютить это в глобальном контексте. Именно поэтому jQuery для выполнения скриптов использует маленький трюк (по сути всё сводится к созданию элемента script в DOM-дереве и добавлении с помощью appebdChild). Добавлено через 1 минуту и 15 секунд Код из jQuery, если что:
|
| Автор: DeMONiZ 19.4.2010, 09:55 |
| Как его связать с моим кодом? я с jQuery не работал да и яву саму недавно изучать начал..? В долгу не останусь очень надо! |
| Автор: Любитель 19.4.2010, 14:10 |
| Мм.. Ну собственно это функция для выполнения кода в глобальном контексте. jQuery.support.scriptEval определяется один раз, в лоб (если отработает appendChild для текстового узла и скрипта - поддерживается, нет - используется проперти text). |
| Автор: DeMONiZ 19.4.2010, 14:36 |
| Ладно попытаюсь сам если ни чего не выйдет, то снова напишу.... |
| Автор: DeMONiZ 19.4.2010, 14:56 |
| Все же давайте подробнее опишем что куда какой функции передавать на прмере вашего кода и моего. или я что то не так сделал (скорее всего ) или я не знаю в чем дело уже :-( |
| Автор: DeMONiZ 19.4.2010, 16:13 | ||
Сделал без всяких там квери:
Вроде такая ернуда а ни кто не догадался... |
| Автор: Любитель 19.4.2010, 17:50 |
| Блин, я же писал изначально в чём дело Понятно, что если весь подгружаемый код будет контекстнонезависимым - то будет работать и через ужасный ивал.. Я просто привёл код, как делается выполнение любого кода в глобальном контексте в "правильных" фреймворках. |
| Автор: DeMONiZ 19.4.2010, 20:44 |
| Да я просто тебя не понял слегка. Сейчас регулярку надо переделать она у меня на один скрипт только евалит, а у меня их штук 16 может быть. |