10

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

我在我的网站中使用 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 内容一样。

4

2 回答 2

3

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

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

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

于 2012-07-20T09:42:25.943 回答
3

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

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

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

于 2012-07-20T09:34:44.063 回答