0

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

当他们单击 Flag 链接时,我使用 AJAX 和 innerHTML 在评论下方显示一个带有原因代码的下拉框,例如 Spam、Offensive、Unrelated to topic 等,以及一个 Cancel 按钮。

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

这就是问题所在。似乎我无法从第一个 AJAX 请求的 HTML 响应中执行 AJAX 请求。JavaScript 函数失败——即使是简单的 Alert('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 代码吗?

4

1 回答 1

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

于 2009-08-20T19:33:05.620 回答