【问题标题】:Executing Javascript functions from an AJAX - HTML response从 AJAX 执行 Javascript 函数 - HTML 响应
【发布时间】:2009-08-20 19:28:03
【问题描述】:

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

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

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

这就是问题所在。似乎我无法从第一个 AJAX 请求的 HTML 响应中执行 AJAX 请求。 JavaScript 函数失败——即使是简单的 Alert('hello world') 也不起作用。我尝试将 JavaScript 函数放置在调用第一个 AJAX 请求的主页中,并将其放置在显示为第一个 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>

注意:上面的&lt;input type="hidden"/&gt; 来自我从http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx 中找到的建议。

当用户单击按钮时,javascript displayalert() 函数不会运行。警告框永远不会弹出。如果我从外部加载文件而不是使用 innerHTML 调用它,则脚本可以正常工作。

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

【问题讨论】:

  • 尝试发布不起作用的代码。很难说你想做什么。
  • 谢谢。我用上面的代码更新了我的原始帖子。

标签: ajax xmlhttprequest innerhtml javascript


【解决方案1】:

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

Firefox 支持脚本评估。

我通常做的是将一些 json 推入输入,然后检查浏览器是否支持 scriptEval,如果不支持,则拉取 json,对其进行评估,然后调用一些传递 json 的方法。

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

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

【讨论】:

  • 感谢您的反馈。我能够通过在主 PHP 文件中包含 JavaScript 函数来实现此功能,而不是将其包含在返回的 AJAX 代码中。然后我就可以从返回的 AJAX 代码中调用该函数了。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 2011-12-19
  • 2012-03-04
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多