Javascript没有在Ajax responseText中执行

时间:2011-05-12 22:30:21

标签: javascript ajax

以下不是我的实际项目,而是一个与我的项目具有相同问题的示例。

以下是主要的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页面时,AJAX javascript运行正常。它获取mypanel.html并将其内容放在divExample.innerHTML中。单词“After”正确显示而不是“Before”。

但是,具有警报的脚本永远不会执行。我不想将警报脚本与mypanel.html分开。在AJAX加载后如何让它执行的任何想法?

我已阅读here这可以做到。

我已经阅读here,这是无法做到的。

任何想法如何实现?

2 个答案:

答案 0 :(得分:4)

您可能需要注意防止任意代码被运行,但这些内容可以起作用:

...
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);
    }
}
...

答案 1 :(得分:0)

对于仍然无法弄清楚的人,

1-检查您的xmlhttp是否包含response密钥。

2-如果存在,则使用xmlhttp.response代替xmlhttp.responseText;

**如果php是您的后端服务器,请print_r(javascrip_code_as_string);然后return;