2009-08-20 87 views
0

我有一个显示注释的网页,用户可以点击“标记”链接报告不适当的评论。从AJAX执行Javascript函数 - HTML响应

当他们点击标记链接时,我使用AJAX和innerHTML在注释下方显示下拉框并显示原因代码,例如,垃圾邮件,攻击性,与主题无关等,以及取消按钮。

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

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

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

所以总结一下,你如何从AJAX请求的HTML响应中执行JavaScript函数?

编辑:这是我所希望做一个样本:

这是填充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代码?

+0

尝试发布您的代码不工作。很难说出你想要做什么。 – noah 2009-08-20 19:35:29

+0

谢谢。我用上面的代码更新了我的原始帖子。 – andrewl85 2009-08-21 04:37:16

回答

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

+0

感谢您的反馈。我能够通过在主PHP文件中包含JavaScript函数而不是将其包含在返回的AJAX代码中来实现这一目标。然后我可以从返回的AJAX代码中调用该函数。 – andrewl85 2009-09-20 21:21:06