Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > не выполняется скрипт


Автор: bazzjr 20.6.2009, 18:06
Всем привет.

Есть следующий код:
Код

function testt(url){
    createRequest();     
    request.onreadystatechange = updatePage99;
    request.open("GET",url,true);
    request.send(null);
}
function updatePage99() {
     if (request.readyState == 4) {
       if (request.status == 200) {
          response = request.responseText;
          getId('testt').innerHTML =  response;
       } else
         alert("status is " + request.status);
     }
   }


В переменной url к примеру вызывается страница содержащая:
Код

<? echo "TEST 1<br />";?>
<span>TEST 2<br /></span>

<script type="text/javascript">
function afg(){    alert("afg");}
</script>

<input class="button" type="button" value=" test " onClick="afg();" />


При нажатии кнопки функция afg не вызывается, пишет ошибку типа такой функции нет, хотя она определенно есть в коде.

Вопрос:
Как сделать так, чтобы после того как призошло innerHTML, после в той странице которую мы "присоединяли"работали javascript коды?
В данном случае функция afg().

Автор: bazzjr 22.6.2009, 10:02
Неужели Гуру Javascript'а, незнают о существовании решения для данной проблеммы.  smile 

Автор: bars80080 22.6.2009, 10:32
Цитата(bazzjr @  20.6.2009,  18:06 Найти цитируемый пост)
request.onreadystatechange = updatePage99;

к функции всегда надо скобочки указывать:

Код

request.onreadystatechange = updatePage99();

Автор: bazzjr 22.6.2009, 11:22
не помогло, даже более того, если поставить скобки, то скрипт не выполняется совсем...

Автор: unicross 22.6.2009, 13:55
bazzjr, предлагаю обходной маневр...

Код

var afg;
function updatePage99() {
   if (request.readyState == 4) {
      if (request.status == 200) { // Запрос успешно обработан
         var xml = request.responseXML;
         var cod = xml.getElementsByTagName("cod")[0].firstChild.data;
         var text = xml.getElementsByTagName("text")[0].firstChild.data;
         eval(cod);
         document.getElementById("testt").innerHTML = text;
      }
      else {
         document.getElementById("testt").innerHTML = "Ошибка";
      }
   }
}


Код

<?php
header('Content-Type: text/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8" ?>' . "\n";
$txt = 'TEST 1<br />
<span>TEST 2<br /></span>
<input type="button" value=" test " onclick="afg();">';
$txt = htmlspecialchars($txt, ENT_COMPAT, 'UTF-8');
$cod = 'afg = function() {
   alert("afg");
}';
$cod = htmlspecialchars($cod, ENT_COMPAT, 'UTF-8');
?>
<ajax>
<cod>
<?php echo $cod; ?>
</cod>
<text>
<?php echo $txt; ?>
</text>
</ajax>


Цитата(bars80080)
к функции всегда надо скобочки указывать:

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

Автор: Soah 22.6.2009, 14:28
Код

// ...
response = request.responseText;
getId('testt').innerHTML =  response;
var script = getId('testt').getElementsByTagName('script')[0];
script.text = script.text; // для IE
window.eval(script.text);
// ...

Автор: bazzjr 22.6.2009, 14:59
Soah работает!  smile 

ты бы не мог поподробней рассказать что это? или дать ссылку где это зелье можно покурить  smile

Добавлено через 3 минуты и 47 секунд
От меня + репутация полюбому.

Автор: Soah 22.6.2009, 15:05
Цитата(bazzjr @  22.6.2009,  14:59 Найти цитируемый пост)
или дать ссылку где это зелье можно покурить

а что Google сегодня отдыхает smile 

http://wdh.suncloud.ru/js08.htm#meval

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)