2014-09-12 2 views
0

У меня есть HTML, который использует эту функцию для загрузки другого PHP с помощью Ajax:Run JavaScript после Ajax

function LoadContent(n,func) 
{   
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState== 4 && xmlhttp.status == 200) 
     { 
      document.getElementById("div-content").innerHTML=xmlhttp.responseText; 
     if(typeof(func)==='undefined') 
       { 
       // nothing 
       } 
      else 
       { 
       eval(func); 
       } 

     } 
    } 
    xmlhttp.open("GET",n,true); 
    xmlhttp.send(); 
} 

До сих пор все ОК. PHP для загрузки генерирует HTML, который содержит

<script> 
function foo() { 
alert('hello'); 
} 
</script> 

И оригинальный HTML вызывает загрузчик с javascript:LoadContent('file.php','foo()'), но Foo() не вызывается. Строка eval() говорит «нет такой функции» в Chrome.

Как я могу управлять им, поэтому после загрузки Ajax будет выполняться функция JavaScript, которая будет находиться в загруженном html?

+0

Если HTML вы отправленный - это * ответ *, отправленный сервером, вы также должны добавить его в документ, прежде чем что-либо сделать с ним. Тем не менее, я бы сказал, что это, загрузка JS с сервера и передача строки JS, которая должна быть оценена после загрузки содержимого, является плохим подходом. –

+0

Да, он добавлен в документ, я просто укоротил функцию. Я его отредактировал. – Michael

+2

Ах. 'scripts', добавленные через' innerHTML', не оцениваются браузером по соображениям безопасности (см. https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML#Security_considerations). Таким образом, ваша функция действительно не существует. См. Также [Может ли скрипт быть вставлен с innerHTML?] (Http://stackoverflow.com/q/1197575/218196) –

ответ

0

ли это вместо:

javascript:LoadContent('newstandby.php',foo) 

поскольку foo является функцией и она будет вызываться в качестве обратного вызова он передается как функция и не является результатом (foo())

+0

Тот же результат. foo() не определено. – Michael

+0

Это не сработает, так как 'foo' еще не существует (по крайней мере, если я правильно понимаю). –

+0

Он существует, когда PHP загружается из вызова Ajax. – Michael

Смежные вопросы