JCO*_*611 94 html javascript ajax
有一个名为"内容"的div:
<div id="content"></div>
Run Code Online (Sandbox Code Playgroud)
它应该由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>
Run Code Online (Sandbox Code Playgroud)
Cho*_*ula 62
作为DOM文本插入的JavaScript将不会执行.但是,您可以使用动态脚本模式来实现目标.基本思想是将要执行的脚本移动到外部文件中,并在获得Ajax响应时创建脚本标记.然后src
,您可以设置脚本标记的属性,然后加载并执行外部脚本.
这个其他StackOverflow帖子也可能对您有所帮助:可以使用innerHTML插入脚本吗?.
Fir*_*zam 58
我用过这段代码,工作正常
var arr = MyDiv.getElementsByTagName('script')
for (var n = 0; n < arr.length; n++)
eval(arr[n].innerHTML)//run script inside div
Run Code Online (Sandbox Code Playgroud)
Chr*_*kar 13
如果您通过Ajax在div中加载脚本块,如下所示:
<div id="content">
<script type="text/javascript">
function myFunction() {
//do something
}
myFunction();
</script>
</div>
Run Code Online (Sandbox Code Playgroud)
...它只是更新页面的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");
}
Run Code Online (Sandbox Code Playgroud)
另一种快速而肮脏的方法是使用eval()执行您作为DOM文本插入的任何脚本代码,如果您不想使用jQuery或其他库.
以下是将评估文本中所有脚本标记的脚本.
function evalJSFromHtml(html) {
var newElement = document.createElement('div');
newElement.innerHTML = html;
var scripts = newElement.getElementsByTagName("script");
for (var i = 0; i < scripts.length; ++i) {
var script = scripts[i];
eval(script.innerHTML);
}
}
Run Code Online (Sandbox Code Playgroud)
从服务器收到HTML后,只需调用此函数即可.警告:使用eval
可能很危险.
演示:http: //plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p =preview
如果您不尝试将 XHR 返回的 HTML 的子集附加到文档中,那么这对我使用 jQuery 来说“仅适用”。(请参阅此错误报告,其中显示了 jQuery 的问题。)
这是一个显示它工作的示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test_1.4</title>
<script type="text/javascript" charset="utf-8" src="jquery.1.4.2.js"></script>
<script type="text/javascript" charset="utf-8">
var snippet = "<div><span id='a'>JS did not run<\/span><script type='text/javascript'>" +
"$('#a').html('Hooray! JS ran!');" +
"<\/script><\/div>";
$(function(){
$('#replaceable').replaceWith($(snippet));
});
</script>
</head>
<body>
<div id="replaceable">I'm going away.</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是上面的等效项:http : //jsfiddle.net/2CTLH/
归档时间: |
|
查看次数: |
207489 次 |
最近记录: |