我不知道这可能是重复但是,
我在我的网站上使用ajax,现在响应该调用我发送了一些HTML和脚本。
然后我用页面中存在的一些元素替换那些数据。
现在,我想进行第二次ajax调用,以便从已加载的div中删除html内容。然后再次ajax调用返回一些其他的HTML代码和脚本。但有时候,先前的脚本和新到的脚本之间存在冲突。
EX。
第一个响应我用一些元素替换html和脚本:$('.ma_right_main').html(response.data);
然后在第二次通话之前删除内容:
$('.ma_right_main').html('');
第二个回复我用一些元素替换html
和脚本:$('.ma_right_main').html(response.data);
但更换后第二次从第一次返回的脚本仍在执行中。我想删除它就像我可以删除html内容一样。
答案 0 :(得分:3)
我不认为一旦浏览器加载了一个可以删除它的脚本(这并不意味着你不能将它从dom中删除,但它仍然存在。)例如,如果你有一个脚本使用变量x
,加载页面以便脚本加载,从dom中删除脚本,x
我认为仍然会定义。
有很多方法可以解决这个问题,如果每个动态加载的脚本都是它自己的对象,那么当“卸载”时你可以将对象设置为null。这是我在寻找类似解决方案时遇到的一个解决方案。
答案 1 :(得分:3)
脚本根本不是自然执行的。 (设置.innerHTML
不会在HTML中执行脚本。)
jQuery手动查找html中的所有脚本元素,删除它们并对它们进行评估。因此,如果您使用.html
并且不希望脚本执行,请不要在html中包含脚本。
并且您无法停用脚本,因此您需要考虑到这一点来重构您的网站。如果新代码可能与之前的代码冲突,请不要在代码中包含新代码。使用始终加载的通用代码。