2012-07-20 61 views
10

我不知道这可能是重复的,但删除AJAX加载的内容和脚本

我用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

+1有趣的问题 – 2012-07-20 09:32:12

回答

3

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

尽管如此,如果每个动态加载的脚本都是它自己的对象,当“卸载”时可以将对象设置为null。这是我在寻找类似解决方案时遇到的一种解决方案。

发现我指的是参考:https://stackoverflow.com/a/1346903/1475461

3

脚本天然不获执行。 (设置.innerHTML不会在HTML内执行脚本)。

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

而且你不能停用脚本,所以你需要重新考虑你的网站。如果与先前的代码相冲突,请不要在回复中包含新代码。使用始终加载的通用代码。

+0

你的意思是,如果我使用.innerHTML,那么只有html内容将被替换。之后没有脚本的影响。 – Parixit 2012-07-20 11:17:26

+1

@ user631652是的我的意思是,如果你做'element.innerHTML =“”;'脚本不执行。请参阅http://jsfiddle.net/TTH4R/ – Esailija 2012-07-20 11:18:28