有一个名为“ Content”的div:

<div id="content"></div>


应使用AJAX填充来自PHP文件的数据,包括<script>标记。但是,此标签内的脚本未执行。

<div id="content"><!-- After AJAX loads the stuff that goes here -->
   <script type="text/javascript">
     //code
   </script>
   <!-- More stuff that DOES work here -->
</div>


评论

您如何加载div?根据您使用的库,通常可以控制是否只希望在ajax加载后执行脚本。

在window.onload之后,我创建一个XMTHttpRequest对象来请求另一个(php)页面,该页面包含div的内容,包括一个脚本。我正在使用普通JS来执行此操作,没有任何库(除了我自己的哈哈)

#1 楼

作为DOM文本插入的JavaScript将不会执行。但是,您可以使用动态脚本模式来实现您的目标。基本思想是将要执行的脚本移到外部文件中,并在收到Ajax响应时创建脚本标签。然后,您设置脚本标签和瞧的src属性,它将加载并执行外部脚本。

这另外一个StackOverflow帖子也可能对您有所帮助:可以将脚本与innerHTML一起插入吗? />

评论


您可以选择所有已加载的脚本并通过eval()函数执行它们:$('#audit-view script')。each(function(index,element){eval(element.innerHTML);})

–Jerzy Gebler
15年8月19日在16:01



绝对应执行添加到页面的Javascript。 (例如jsfiddle.net/wnn5fz3m/1)。问题是为什么有时不这样做?

– NoBugs
15-10-23在1:39

@Chocula我将我的脚本移到了一个单独的文件,但是它仍然无法正常运行,您能帮上忙吗? stackoverflow.com/questions/42941856/…

– Samra
17 Mar 23 '17 at 5:07



仅供参考(@NoBugs给了我一个线索)。我尝试了简单的javascirpt element.innerHTML = zzz和设计工作。然后我尝试使用Jquery $(element).html(zzz)并工作。

– gtryonp
19年11月15日在17:18

#2 楼

我使用了这段代码,它工作正常

var arr = MyDiv.getElementsByTagName('script')
for (var n = 0; n < arr.length; n++)
    eval(arr[n].innerHTML)//run script inside div


评论


如果您问我,这是一个比公认的更好的答案。这几乎是JavaScript注入。

– Xedret
2013年9月27日19:16在

虽然有用,但这确实不能回答为什么脚本无法运行的问题。例如,请参见jsfiddle.net/fkqmcaz7和jsfiddle.net/wnn5fz3m/1,它绝对应该运行,并且我找不到它不起作用的简化情况。

– NoBugs
15年11月8日在8:41

@NaoiseGolden OP确实是在询问脚本的执行情况,所以我认为这里还可以。 :-)

–今天轮到
16年1月1日在1:50

强烈不建议使用Eval()。看到这个-stackoverflow.com/questions/9107847/…

–国王
18 Mar 9 '18 at 14:03

#3 楼

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

<div id="content">
    <script type="text/javascript">
    function myFunction() {
      //do something
    }
    myFunction();
    </script>
</div>


...它只是更新页面的DOM,myFunction()不一定会得到叫。

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

您正在做的事情不同于从一开始就加载包含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");
    }


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

评论


使用jQuery的回调,如何“执行”新