从AJAX - HTML响应执行Javascript函数

时间:2009-08-20 19:28:03

标签: ajax xmlhttprequest innerhtml javascript

我有一个显示评论的网页,用户可以点击“举报”链接报告不当评论。

当他们点击Flag链接时,我使用AJAX和innerHTML在评论下方显示一个下拉框,其中包含原因代码,例如:垃圾邮件,攻击性,与主题无关等,以及取消按钮。

如果用户单击“提交”,我想使用另一个AJAX请求将其响应发送到更新数据库的PHP文件,并在结束时收到“谢谢”(无需重新加载页面)。我基本上希望使用另一个AJAX请求将显示下拉框的DIV替换为“Thank you”。

这就是问题所在。似乎我无法从第一个AJAX请求的HTML响应中执行AJAX请求。 JavaScript函数失败 - 即使是简单的警报('hello world')也不起作用。我尝试将JavaScript函数放在调用第一个AJAX请求的主页面中,并将其放在PHP文件中,该文件显示为来自第一个AJAX请求的HTML响应,但我没有任何运气 - 函数只是做他们被召唤时不会跑。

如果我在外部加载PHP文件,一切正常,所以我知道JavaScript是正确的。当我将PHP文件加载到HTML响应DIV然后从那里调用JavaScript时,它就无法工作。

总而言之,如何从AJAX请求的HTML响应中执行JavaScript函数?

编辑:以下是我想要做的一个示例:

当用户点击Flag链接时,这是填充DIV的AJAX部分:

xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4)
{
     document.getElementById(whichdiv).innerHTML=xmlhttp.responseText;
}
};

xmlhttp.responseText的值来自此外部文件:

<input type="hidden"/>
<script type="text/javascript" language="javascript">
function displayalert()
{
    alert ('Hello World!');
}
</script>

<form name="myform" id="myform">
<input type="text" name="myfield" value="teststring"/><br/>
<input type="button" name="button" value="Submit" 
   onclick="displayalert();"/>
</form>

注意:上面<input type="hidden"/>来自我http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx发现的建议。

当用户单击该按钮时,javascript displayalert()函数不会运行。警报框永远不会弹出。如果我在外部加载文件而不是用innerHTML调用它,那么脚本运行正常。

xmlhttp.responseText可以包含JavaScript代码吗?

1 个答案:

答案 0 :(得分:0)

取决于浏览器: IE不支持使用ajax加载的html上的scriptEval,这意味着如果你的html中有脚本块,它们就不会被调用。

Firefox支持脚本评估。

我通常做的是将一些json推入输入,然后检查浏览器是否支持scriptEval,如果没有,请拉json,评估它,并调用一些传递json的方法。

如果浏览器支持scriptEval,我还包含一个脚本块,其中包含对json使用相同方法的调用。

您可能还想阅读此内容: http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html