Javascript не выполняется в Ajax responseText - PullRequest
0 голосов
/ 13 мая 2011

Ниже приведен не мой реальный проект, а пример с той же проблемой, что и у моего проекта.

Вот основной фрагмент HTML-страницы:

<div id="divExample">Before</div>
<script type="text/javascript">
    loadExample();
</script>

Вот фрагмент файла javascript:

xmlhttp.onreadystatechange=function()
{
    if(xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById('divExample').innerHTML=xmlhttp.responseText;
    }
}
xmlhttp.open("GET","mypanel.html",true);
xmlhttp.setRequestHeader("If-Modified-Since", "Sun, 31 Dec 1899 23:59:59 GMT");
xmlhttp.send();

Вот полученный mypanel.html:

After
<script type="text/javascript">
    alert("Fetched script is working.");
</script>

Когда я загружаю главную страницу HTML, JavaScript AJAX работает нормально. Он извлекает mypanel.html и помещает его содержимое в divExample.innerHTML. Слово «После» правильно отображается вместо «До».

Однако скрипт с предупреждением никогда не выполняется. Я не хотел бы отделить сценарий оповещения от mypanel.html. Любые идеи, как я могу заставить его работать после загрузки AJAX?

Я прочитал здесь , что это можно сделать.

Я прочитал здесь , что это невозможно сделать.

Есть идеи, как это сделать?

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Вы хотели бы позаботиться о том, чтобы предотвратить запуск произвольного кода, но что-то вроде этого может работать:

...
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var myDiv = document.getElementById('divExample');
    myDiv.innerHTML = xmlhttp.responseText;

    var myScripts = myDiv.getElementsByTagName("script");
    if (myScripts.length > 0) {
        eval(myScripts[0].innerHTML);
    }
}
...
0 голосов
/ 05 апреля 2017

В случае людей, которые все еще не могут понять,

1 - проверьте, содержит ли ваш xmlhttp ключ response.

2 - Если присутствует, используйте xmlhttp.response вместо xmlhttp.responseText;

**, если php является вашим внутренним сервером, выполните print_r(javascrip_code_as_string); затем return;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...