我有一个要求,点击图标应该打开一个新窗口,用户可以在其中查看和编辑某些字段。用户关闭此窗口并返回父窗口后,应更改图标颜色和文本(例如: - 如果用户删除了某些数据,图标将变为红色,文本将设置为空。如果用户按下取消按钮,没有任何变化)
我计划使用body onload函数实现它,它实际上使用AJAX请求检查数据库,以查看用户是否已更改数据,然后相应地更改图标和文本。
但是,我认为这种方法存在两个问题
1.即使用户没有改变任何东西,也会有一个AJAX呼叫。(即按下取消按钮)
每次身体聚焦时都会调用AJAX。例如: - 他可能正在处理其他一些页面(或完全不同的浏览器)并回到此处,从而产生一个AJAX调用。
任何人都可以提出更好的方法。 我正在使用Javacript,JSP,Java
答案 0 :(得分:1)
我认为最简单的方法是设置一个cookie(了解here)。然后,您可以让两个窗口相互通信。这不是AJAX,但最有可能奏效。
答案 1 :(得分:1)
实现此目的的两种方法
方法1
您知道在打开的表单中更改数据库的方法。假设您有一个删除方法,请在该方法之后写一个额外的window.opener.location.reload()
。缺点是每次更改子窗口中的内容时都会重新加载opener(父窗口)。这是不必要的。
方法2 - 使用cookie
我正在使用MDN' A little framework: a complete cookies reader/writer with full unicode support来创建Cookie。行动计划将是这样的。在更改子窗口中的任何内容后,创建一个cookie并为其设置一个值,并在数据库中更新它,如docCookies.setItem("isChildFormUpdated", "yes");
。您可以对每个操作使用相同的cookie。现在,当您导航回父表单时,请执行此操作。
$(document).ready() {
$(window).focus(function () {
var formCookie = docCookies.getItem("isChildFormUpdated");
if (formCookie !== null && formCookie == "yes") {
//resetting the cookie. you can also remove the cookie
docCookies.setItem("isChildFormUpdated", "no");
//docCookies.removeItem("isChildFormUpdated");
// your ajax call comes here
//or you could simply reload the form so that we get fresh data
//window.location.reload(); // it will be heavier
}
});
});
我希望你能得到基本的想法。
答案 2 :(得分:0)
另一种创建弹出式框的好方法是使用模态框。这些可能很复杂但看起来非常好。你必须制作一个jQuery插件,但你可以拿一个here并了解它是如何工作的。祝你好运。