У меня есть 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?
Если HTML вы отправленный - это * ответ *, отправленный сервером, вы также должны добавить его в документ, прежде чем что-либо сделать с ним. Тем не менее, я бы сказал, что это, загрузка JS с сервера и передача строки JS, которая должна быть оценена после загрузки содержимого, является плохим подходом. –
Да, он добавлен в документ, я просто укоротил функцию. Я его отредактировал. – Michael
Ах. 'scripts', добавленные через' innerHTML', не оцениваются браузером по соображениям безопасности (см. https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML#Security_considerations). Таким образом, ваша функция действительно не существует. См. Также [Может ли скрипт быть вставлен с innerHTML?] (Http://stackoverflow.com/q/1197575/218196) –