Не рабоатет javascript код, подгружаемый через ajax.

Не рабоатет javascript код, подгружаемый через ajax.

Пользуюсь библиотекой Д. Котерова.
Проблема недавно обнаружилась. В тех данных, которые подгружаются - частично работает javascript.
Пример динамически загружаемых данных:
PHP:
<script type="text/javascript" language="javascript">
   alert('test'); // Это не будет вызвано при загрузке

   function test() {
       alert('test 2');
   }
</script>
<a href="javascript:alert('a');">Это работает</a><br />
<a href="javascript:test();">Это работать не будет. Говорит, что функция test - не определена...</a><br />
з.ы. может так и должно быть?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Определи ф-цию в роддительском скрипте
 
Mr_Max
Да-да... Уже как-только не пробовал. :(

-~{}~ 28.03.08 13:49:

Вот накидал пример. Вызываем файл 1.php, жмем на ссылку test - и наблюдаем...

1.php
PHP:
<script src="/_js/JsHttpRequest.js"></script>
<script language="JavaScript">    
	function send_and_load() {

        JsHttpRequest.query( 
            '/2.php', 
            {
            	'a' : 'test'
            },
            
            function(result, errors) {
            
    	        document.getElementById('id_main').innerHTML = result['sText'];
			},
            false
        );
	}
</script>

<a href="javascript:send_and_load();">test</a>
<div id="id_main">dfgdf</div>
2.php
PHP:
<?php

    include_once $_SERVER['DOCUMENT_ROOT'].'/config.php';
    require_once(_LIB_.'/JsHttpRequest.php');
	$JsHttpRequest =& new JsHttpRequest("windows-1251");
	
	$GLOBALS['_RESULT'] = array('sText' => '
	<script type="text/javascript" language="javascript"> 
   alert(\'test\'); // Это не будет вызвано при загрузке 

   function test() { 
       alert(\'test 2\'); 
   } 
</script> 
<a href="javascript:alert(\'a\');">Это работает</a><br /> 
<a href="javascript:test();">Это работать не будет. Говорит, что функция test - не определена...</a><br />
	');
	
	exit();
?>
з.ы. все пути к библиотекам верные. Работает именно так, как я и описал... :(

Собственно хотелось, чтобы работал этот кусочек:
--
alert(\'test\'); // Это не будет вызвано при загрузке
--

Я понимаю, что это можно сделать, впихнув в функцию send_and_load, и она будет выполнять необходимые действия после загрузки.
Но городить такой огород не сильно хочется...
 

Pabla

Новичок
неправильный это путь.
подгружать нужно данные, а не код.
 
Pabla
Это маленькая часть большой системы. Перезагрузок страниц в которой нет вообще - все через ajax.

Если сразу подключать все js-файлы, функции, и т.д. - будет уж очень много данных...


-----

Файлы тоже подключать не получается.
Т.е. если написать в 2.php
Еще что-то вроде: <script src="/3.js"></script> - тоже этот файл не будет подключен. :(

-~{}~ 28.03.08 14:37:

А!!! Я крутой!!!
Решение нашлось. :D

Загружаем отдельно js данные.

Т.е. 1.php
PHP:
            function(result, errors) { 
             
                document.getElementById('id_main').innerHTML = result['sText']; 
            },
меяем на:
PHP:
            function(result, errors) {
            
    	        document.getElementById('id_main').innerHTML = result['sText'];
    	        
				if (result['sFunc']) {
    	        	eval(result['sFunc']);
    	        }
			},
А в файле 2.php отдельно отдаем js код, который должен выполняться при загрузке.
PHP:
	$GLOBALS['_RESULT'] = array('sText' => '
<a href="javascript:alert(\'a\');">Это работает</a><br /> 
<a href="javascript:test();">Это работать не будет. Говорит, что функция test - не определена...</a><br />
<a href="javascript:test2();">test2</a><br />
	', 
	
	'sFunc' => "alert('test');

   function test() { 
       alert('test 2'); 
   }");
Правда функцию test все еще не видит, но это уже мелочь. :)))

з.ы. всем спасибо. тема закрыта. :)
 

maxwell

artifex
Гениально было бы использовать поиск и не создавать таких тем.

Pabla, код подгружать можно и нужно, но только с умом. Это как рекурсия — в умелых руках очень мощный инструмент.


Loshadka, у Лебедева на сайте было что-то про инклюдинг JavaScript'a почитай, сильно облегчит жизнь.
 
Сверху