AJAX 调用后 JavaScript 不加载

发布于 2024-12-20 19:58:13 字数 425 浏览 0 评论 0原文

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

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

Ok the following HTML code is parsed when I load a page:

<div id="clip-wrapper"> 
    <script type="text/javascript"> 
        alert("bla");
    </script> 
</div>

This obviously leads to an alert saying "bla", after my AJAX call, the parsed HTML code looks like this:

<div id="clip-wrapper">
<script type="text/javascript">
    alert("ajaxbla");
</script>
</div>

This on the other hand, doesn't result in an alert. Why? And how do I fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦中楼上月下 2024-12-27 19:58:13

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

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

但理想情况下,您希望将脚本作为回调运行 strong> 当你的 ajax 请求完成时。如果您使用的是 jQuery,则这将是 ajax 调用的 success 事件,如果您在本机执行此操作,则这将是 xhr 对象的 readyStateChange 事件。

编辑

如果您确实想选择 eval 选项,您可以尝试如下操作:

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

If there are any scripts loaded into your dom from an Ajax call, they will not be executed for security reasons.

To get the script to execute, you'll need to strip it out of the response, and run it through eval

Ideally though, you'll want to run your script as a callback for when your ajax request completes. If you're using jQuery, this would be the success event of your ajax call, and if you're doing it natively, it would be the readyStateChange event of your xhr object.

EDIT

If you really want to opt for the eval option, you could try something like this:

document.getElementById(contentDiv).innerHTML = xmlHttp.responseText;
eval(document.getElementById("clip-wrapper").innerHTML);
娇纵 2024-12-27 19:58:13

将代码放入

$(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");
  }
});

在成功事件中转到此处,您可以编写代码,该代码在完成ajax后执行。

put you code in

$(document).ready(function()
{
  alert(msg);
});

or make use of readysatchange event of XMLHttp object.

XMLHttpobject.readyStateChange( furnction() { alert('msg'); } );

Edit

if you are using jquery than go for

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    $(this).addClass("done");
  }
});

here in sucess event you can write your code which get executed once you are done with the ajax.

吐个泡泡 2024-12-27 19:58:13

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

在ajax调用中,如果您使用的是jQuery,请使用callbacksuccess:oncomplete:来处理ajax响应。

any code inside body in between script tag will executed only while loading the document.

in ajax call,make use of callback or success: or oncomplete: to handle the ajax response if you are using jQuery.

孤独陪着我 2024-12-27 19:58:13

你的意思是第二个 html 代码是作为 ajax 响应来的?您甚至将 html 插入到当前页面了吗?

类似的东西,

document.body.innerHTML = ajax_response;

但即使使用 innerHTML 替换,我也不认为其中的 script 会自动执行。浏览器将解析脚本,但不会自动执行它。 (例如,如果您在 html 中有一个 function 定义,则在 ajax 调用之后您将能够调用这些函数)

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

document.write(ajax_response);

希望这有帮助,

You mean the second html code is coming as an ajax response?? Did you even inserted the html to the current page?

Something like,

document.body.innerHTML = ajax_response;

But even with innerHTML replacement I don't thing the script inside it will be auto executed. The browser will parse the script but won't auto execute it. (For eg, if you have a function definition in the html, after the ajax call you will be able to call those functions)

Another option is to use document.write, it will replace the whole page content with the new html and the script tags in it will be auto executed.

document.write(ajax_response);

Hope this helps,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文