有一个叫做“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>
发布于 2011-01-07 05:32:07
将不会执行以DOM文本形式插入的JavaScript。但是,您可以使用dynamic script pattern来实现您的目标。基本思想是将要执行的脚本移动到外部文件中,并在获得Ajax响应时创建脚本标记。然后设置脚本标记的src
属性,就这样,它加载并执行外部脚本。
另一篇StackOverflow文章可能也会对你有所帮助:Can scripts be inserted with innerHTML?。
发布于 2013-04-29 19:59:21
我使用了这段代码,它工作得很好
var arr = MyDiv.getElementsByTagName('script')
for (var n = 0; n < arr.length; n++)
eval(arr[n].innerHTML)//run script inside div
发布于 2011-01-07 05:15:52
如果您通过Ajax在div中加载一个脚本块,如下所示:
<div id="content">
<script type="text/javascript">
function myFunction() {
//do something
}
myFunction();
</script>
</div>
..。它只是更新页面的DOM,myFunction()不一定会被调用。
您可以使用Ajax回调方法,例如jQuery的ajax() 方法中的回调方法来定义请求完成时要执行的内容。
您所做的与从get-go加载包含JavaScript的页面不同( get -go确实会被执行)。
拉取部分内容后如何使用成功回调和错误回调的示例:
$.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文本插入的任何脚本代码。
https://stackoverflow.com/questions/4619668
复制相似问题