【问题标题】:Remove ajax loaded content and script删除 ajax 加载的内容和脚本
【发布时间】:2012-07-20 09:29:34
【问题描述】:

我不知道这可能是重复的,但是,

我在我的网站中使用 ajax,现在为了响应该调用,我发送了一些 html 和脚本。

然后我用页面中存在的一些元素替换该数据。

现在,我想进行第二次 ajax 调用,所以我已经从加载的 div 中删除了 html 内容。然后再次 ajax 调用返回一些其他的 html 代码和脚本。但有时是以前的脚本和新到的脚本冲突。

前。 第一个响应我用一些元素替换了 html 和脚本:$('.ma_right_main').html(response.data);

然后在第二次通话之前我删除内容: $('.ma_right_main').html('');

第二个响应我用一些元素替换 html 和脚本:$('.ma_right_main').html(response.data);

但是在第二次替换它之后,从第一次返回的脚本仍然在执行中。我想删除它,就像删除 html 内容一样。

【问题讨论】:

    标签: javascript ajax jquery


    【解决方案1】:

    我不认为一旦浏览器加载了一个脚本就可以删除(这并不意味着你不能从 dom 中删除它,但它仍然存在。)例如,如果你有一个脚本使用变量 x,加载页面以便加载脚本,从 dom 中删除脚本,x 我认为仍然会被定义。

    但是有一些方法可以解决这个问题,如果每个动态加载的脚本都是它自己的对象,那么在“卸载”时你可以将对象设置为 null。这是我不久前在寻找类似解决方案时遇到的解决方案。

    找到我所指的参考:https://stackoverflow.com/a/1346903/1475461

    【讨论】:

      【解决方案2】:

      脚本根本不会自然执行。 (设置.innerHTML 不会执行HTML 内的脚本)。

      jQuery 手动查找 html 中的所有脚本元素,删除它们并评估它们。因此,如果您使用 .html 并且不希望脚本执行,请不要在 html 中包含脚本。

      而且您无法停用脚本,因此您需要考虑到这一点来重构您的网站。如果新代码可能与以前的代码冲突,请不要在响应中包含新代码。使用始终加载的通用代码。

      【讨论】:

      • 您的意思是,如果我使用 .innerHTML 则只会替换 html 内容。然后没有脚本的影响。
      • @user631652 是的,我的意思是,如果你这样做element.innerHTML = "<script>alert('hello');</script>";,则不会执行脚本。见jsfiddle.net/TTH4R
      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2019-02-15
      • 2013-01-19
      相关资源
      最近更新 更多