首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在AJAX调用后执行innerHTML注入的<script>

在AJAX调用后执行innerHTML注入的<script>
EN

Stack Overflow用户
提问于 2011-01-07 04:45:58
回答 9查看 231.1K关注 0票数 112

有一个叫做“Content”的div:

代码语言:javascript
复制
<div id="content"></div>

它应该由AJAX填充来自PHP文件的数据,包括一个<script>标记。但是,此标记中的脚本不会被执行。

代码语言:javascript
复制
<div id="content"><!-- After AJAX loads the stuff that goes here -->
   <script type="text/javascript">
     //code
   </script>
   <!-- More stuff that DOES work here -->
</div>
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-01-07 05:32:07

将不会执行以DOM文本形式插入的JavaScript。但是,您可以使用dynamic script pattern来实现您的目标。基本思想是将要执行的脚本移动到外部文件中,并在获得Ajax响应时创建脚本标记。然后设置脚本标记的src属性,就这样,它加载并执行外部脚本。

另一篇StackOverflow文章可能也会对你有所帮助:Can scripts be inserted with innerHTML?

票数 70
EN

Stack Overflow用户

发布于 2013-04-29 19:59:21

我使用了这段代码,它工作得很好

代码语言:javascript
复制
var arr = MyDiv.getElementsByTagName('script')
for (var n = 0; n < arr.length; n++)
    eval(arr[n].innerHTML)//run script inside div
票数 75
EN

Stack Overflow用户

发布于 2011-01-07 05:15:52

如果您通过Ajax在div中加载一个脚本块,如下所示:

代码语言:javascript
复制
<div id="content">
    <script type="text/javascript">
    function myFunction() {
      //do something
    }
    myFunction();
    </script>
</div>

..。它只是更新页面的DOM,myFunction()不一定会被调用。

您可以使用Ajax回调方法,例如jQuery的ajax() 方法中的回调方法来定义请求完成时要执行的内容。

您所做的与从get-go加载包含JavaScript的页面不同( get -go确实会被执行)。

拉取部分内容后如何使用成功回调和错误回调的示例:

代码语言:javascript
复制
  $.ajax({
    type: 'GET',
    url: 'response.php',
    timeout: 2000,
    success: function(data) {
      $("#content").html(data);
      myFunction();
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("error retrieving content");
    }

如果不想使用jQuery或其他库,另一种快捷的方法是使用eval()来执行作为DOM文本插入的任何脚本代码。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4619668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档