forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   Выполнение JS внутри страницы запрашиваемой AJAX'ом (http://forum.boolean.name/showthread.php?t=19771)

St_AnGer 03.04.2015 17:29

Выполнение JS внутри страницы запрашиваемой AJAX'ом
 
Приветствую, Булчане.

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

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

Схематичный пример:
страничка window1.php:
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>
... 

страничка где работаю аяксом:
PHP код:

<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-ом), и на
PHP код:

document.getElementById('inputForDiv1').value "azazaza"

вполне ожидаемо выскакивает ошибка отсутствия элемента (js ведь не выполнился внутри ajax-запроса).

Каким способом можно запустить этот js внутри запроса?
Eval не предлагать. Даже не беря во внимание небезопасность его использования, его всё равно использовать не получится - внутри window1.php есть код php, на котором Eval сразу же и умирает.

h1dd3n 03.04.2015 20:47

Ответ: Выполнение JS внутри страницы запрашиваемой AJAX'ом
 
ты уверен что скрипт не выполняется?
добавь строчку
debugger;
открой средства разработки хрома
отладчик должен остановится на этой сроке (как на брейкпоинте)

ABTOMAT 04.04.2015 01:34

Ответ: Выполнение JS внутри страницы запрашиваемой AJAX'ом
 
Я обычно так делаю в похожих ситуациях.

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

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

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

PHP код:

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


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

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

PHP код:

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

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


}); 

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

Слухи о небезопасности eval на javascript'е (при пряморуком использовании) сильно преувеличены.


Часовой пояс GMT +4, время: 15:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot