Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 03.04.2015, 14:29   #1
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 1,996
Написано 1,138 полезных сообщений
(для 2,746 пользователей)
Выполнение JS внутри страницы запрашиваемой AJAX'ом

Приветствую, Булчане.

Есть небольшая проблемка. Перепиливаю систему окошек у себя на сайте, всё красиво и работает. Но, мне не нравится что содержимое окошек подготавливается сразу при загрузке страницы, даже если я эти окошки не буду открывать, и, собственно, сама страница весит дюже дофига. Решил сделать запрос содержимого окошек ajax'ом при открытии каждого окошка (то что такое окошко будет открываться с временнЫм лагом при тормозном интернете - за проблему не считаю пока что).

Собственно, всё бы хорошо, но у меня на запрашиваемой ajax'ом странице поля ввода (input обыкновенные) создаются через функцию js (допустим, createInput с какими то там параметрами). Я понимаю что не есть хорошо, гораздо проще нормально html-инпутов навешать. Но так есть (остаток от предыдущего программиста проекта), и, выпилить всё это безобразие времени не хватает.
Так вот. Как можно эти js функции выполнить внутри страницы, которую я спрашиваю аяксом?

Схематичный пример:
страничка window1.php:
...
<
script type="text/javascript" src="windows.js"></script>
//в этом js-файле описана функция createInput(parent, id);
//первый параметр - куда добавлять инпут (добавляется через innerHTML)
//второй параметр - id самого инпута
...
<div id="div1">
    <script type="text/javascript">
        createInput("div1", "inputForDiv1"); 
    </script>
</div>
<div id="div2">
    <script type="text/javascript">
        createInput("div2", "inputForDiv2"); 
    </script>
</div>
... 
страничка где работаю аяксом:
<script type="text/javascript">
    
jQuery.ajax({
    
type"GET",
    
url"window1.php",
    
success: function (data){       
        
document.getElementById('windowNetworkContent').innerHTML data;

        
document.getElementById('inputForDiv1').value "azazaza";
    }
});
</script> 
Полученый html вставляется как надо (за исключением инпутов создаваемых js-ом), и на
document.getElementById('inputForDiv1').value "azazaza"
вполне ожидаемо выскакивает ошибка отсутствия элемента (js ведь не выполнился внутри ajax-запроса).

Каким способом можно запустить этот js внутри запроса?
Eval не предлагать. Даже не беря во внимание небезопасность его использования, его всё равно использовать не получится - внутри window1.php есть код php, на котором Eval сразу же и умирает.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 03.04.2015, 17:47   #2
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 675
Написано 263 полезных сообщений
(для 448 пользователей)
Ответ: Выполнение JS внутри страницы запрашиваемой AJAX'ом

ты уверен что скрипт не выполняется?
добавь строчку
debugger;
открой средства разработки хрома
отладчик должен остановится на этой сроке (как на брейкпоинте)
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (04.04.2015)
Старый 03.04.2015, 22:34   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 25.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,308
Написано 5,156 полезных сообщений
(для 14,893 пользователей)
Ответ: Выполнение JS внутри страницы запрашиваемой AJAX'ом

Я обычно так делаю в похожих ситуациях.

Допустим, каждое окошко должно пройти определённую обработку JavaScript'ом (например, на каждый input навесить какое-то событие).

Окошки грузятся ajax'ом, их может быть сколько угодно.

Я создаю функцию типа такой, которая будет эту обработку выполнять:

function processAjaxBlock(el)
{
el.find('input').click(function(){alert($(this).attr('name')+' здраститя!');});

Ну а дальше в коллбэке об успешной подгрузке ajax'а свежесозданный блок прогоняю через эту функцию:

(предполагается, что пыха высирает json с вёрсточкой в поле html)

$.ajax({url'/mySuperWindowGenerator.php'dataType:'json'}).success(function(data){

var 
newBlock = $(data.html);
newBlock .appendTo($('body'));
processAjaxBlock(newBlock);


}); 
Использую jQuery, если что. Писал по памяти, возможны косячки в коде, но, надеюсь, суть ясна.

Слухи о небезопасности eval на javascript'е (при пряморуком использовании) сильно преувеличены.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (04.04.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 10:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com