好的,我加载页面时会解析以下HTML代码:
<div id="clip-wrapper">
<script type="text/javascript">
alert("bla");
</script>
</div>
这显然导致警告说“bla”,在我的AJAX调用之后,解析的HTML代码如下所示:
<div id="clip-wrapper">
<script type="text/javascript">
alert("ajaxbla");
</script>
</div>
另一方面,这不会导致警报。为什么?我该如何解决这个问题?
答案 0 :(得分:8)
如果从Ajax调用中将任何脚本加载到您的dom中,出于安全原因,它们将不执行。
要让脚本执行,您需要将其从响应中删除,然后通过eval
理想情况下,您需要在ajax请求完成时将脚本作为回调运行。如果您正在使用jQuery,那么这将是您的ajax调用的 success 事件,如果您在本地执行此操作,那么它将是您的xhr对象的readyStateChange事件。
修改强>
如果你真的想选择eval选项,你可以尝试这样的事情:
document.getElementById(contentDiv).innerHTML = xmlHttp.responseText;
eval(document.getElementById("clip-wrapper").innerHTML);
答案 1 :(得分:1)
将代码放入
$(document).ready(function()
{
alert(msg);
});
或使用XMLHttp对象的readysatchange事件。
XMLHttpobject.readyStateChange( furnction() { alert('msg'); } );
修改强>
如果你使用的是jquery而不是去
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
在sucess事件中,您可以编写代码,一旦完成ajax就会执行。
答案 2 :(得分:1)
script
标记之间的正文中的任何代码只会在加载文档时执行。
callback
或success:
或oncomplete:
来处理ajax响应。
答案 3 :(得分:0)
你的意思是第二个html代码是作为一个ajax响应?你有没有把html插入当前页面?
类似的东西,
document.body.innerHTML = ajax_response;
但即使替换innerHTML
,我也不会自动执行script
内的script
。浏览器将解析function
但不会自动执行它。 (例如,如果你在html中有一个document.write
定义,那么在ajax调用之后你就可以调用这些函数了)
另一种选择是使用script
,它会用新的html替换整个页面内容,其中的document.write(ajax_response);
标签将自动执行。
{{1}}
希望这有帮助,