我有一个具有以下要求的应用程序:
应用程序的页面始终包含页面标题,主要内容(中心)和页面页脚。根据用户要求,页面页眉和页脚应保持静态,每当用户从一页导航到另一页时,应用程序应仅刷新主要内容(中心),而不刷新页眉和页脚。
该应用程序最初是由其他前同事安装的,它没有使用“单页应用程序”,但是我们不希望使用iframe来实现上述要求。我们使用的方法是:使用JQuery从服务器获取页面,然后通过命令$(div).html();将该页面呈现为专用的html div。
但是,现在我们注意到我们使用的方法存在一些潜在的问题。从JQuery检索的页面,其中大多数包含javascript对象(变量,函数),默认情况下是全局的。在不刷新/重新加载整个页面的情况下,javacript对象将保留在那里,这可能会导致意外行为,而更多的javascript对象将在页面中累积,这将影响性能。
我尝试了JQuery.empty()方法,但是它仅清除DOM元素,而不清除那些javascript对象。
这是我们将主要内容渲染到中心div中的方式:
function switchPage(pageUrl) {
$.ajax({
url: context + pageUrl,
cache: false,
success: function(result) {
$("#main-content-panel").html(result);
}
});
}
请告知,有一种方法可以以最小的努力有效地清除那些javascript对象?或者,如果这些JQuery方法最初是一个错误的选择,那么这可能是一种花费最少的更改就更好的方法(因为我们已经建立了许多页面,因此我们希望将更改最小化)。
TQ。
答案 0 :(得分:0)
那很脏,但是您可以尝试快速解决:
如果已加载全局JavaScript,则只需删除所有“ script”标签,即可从传入结果中切出所有javascript。如果您需要保留一些脚本,例如。新变量,要替换的函数等。您可以使用例如标记它们。 “实时脚本”类:
function switchPage(pageUrl) {
$.ajax({
url: context + pageUrl,
cache: false,
success: function(result) {
var $result = $(result).find("script:not(.live-script)").remove();
$("#main-content-panel").html($result);
}
});
}