AJAX调用后,Javascript无法加载

时间:2011-12-09 03:18:52

标签: javascript ajax

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

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

4 个答案:

答案 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标记之间的正文中的任何代码只会在加载文档时执行。

在ajax调用中,如果您使用的是jQuery,请使用callbacksuccess: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}}

希望这有帮助,