繁体   English   中英

AJAX调用后,Javascript无法加载

[英]Javascript doesn't load after AJAX call

好的,我加载页面时会解析以下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>

另一方面,这不会导致警报。 为什么? 我该如何解决这个问题?

如果从Ajax调用中将任何脚本加载到您的dom中,则出于安全原因不会执行它们。

要使脚本执行,您需要将其从响应中删除,然后通过eval运行它

但理想情况下,您需要将脚本作为ajax请求完成时的回调运行。 如果您正在使用jQuery,那么这将是您的ajax调用的成功事件,如果您在本地执行它,那么它将是您的xhr对象的readyStateChange事件。

编辑

如果你真的想选择eval选项,你可以试试这样的:

document.getElementById(contentDiv).innerHTML = xmlHttp.responseText;
eval(document.getElementById("clip-wrapper").innerHTML);

把代码放进去

$(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就会执行。

script标记之间的正文中的任何代码仅在加载文档时执行。

在ajax调用中,使用callbacksuccess:oncomplete:如果你正在使用jQuery来处理ajax响应。

你的意思是第二个HTML代码作为ajax响应? 你有没有把html插入当前页面?

就像是,

document.body.innerHTML = ajax_response;

但即使使用innerHTML替换,我也不会自动执行其中的script 浏览器将解析script但不会自动执行它。 (例如,如果你在html中有一个function定义,在ajax调用之后你就可以调用那些函数)

另一种选择是使用document.write ,它将用新的html替换整个页面内容,其中的script标签将自动执行。

document.write(ajax_response);

希望这可以帮助,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM