Javascript - 使用target =“_ blank”提交表单后重新加载页面

时间:2012-11-15 19:13:55

标签: javascript jquery submit reload target

我正在努力实现以下目标:
在页面A上,我们有一个访问受限链接到页面B.访问限制在PHP的服务器端处理 当用户点击此链接到页面B时,我们在页面A(通过javascript)上显示一个带有表单的模态对话框,其中链接的href(B)作为操作。 (为了给用户提供即时反馈。后备是将他重定向到一个登录表单,将他重定向到他想要访问的网站。) 这个系统效果很好。

但现在问我的问题:
我们可以访问应在新窗口中打开的受限链接 现在,如果我在表单上使用target =“_ blank”,则用户会在他来自(A)的页面上保持注销状态,该页面仍然在后台打开。
有没有办法在表单提交到新窗口(B)后立即重新加载页面(A,在后台)?

我的第一个想法是使用window.location.reload();在第A页的提交处理程序中。
这在chrome中不起作用,据我所知可能会造成竞争条件。

另一个想法是通过ajax调用登录用户并通过javascript打开一个新窗口。有没有办法做到这一点,而不必处理弹出窗口拦截器?


我实现了lostsource的想法(见下文),稍加一点 因为我只需要重新加载一次,所以如果cookie改变了,可以停止setInterval的计时器。

var ri=setInterval(function() {  
    if(oldCookie != document.cookie) {  
        // assuming a login happened, reload page  
        clearInterval(ri);  
        window.location.reload();  
    }  
},1000); // check every second

我仍然喜欢这个主意。 stackoverflow太棒了!

3 个答案:

答案 0 :(得分:2)

假设您将PHP会话信息存储在cookie中,您可以监视document.cookie以进行更改。

在提交表单存储之前,当前cookie的值并使用计时器监视它以进行更改:

form.onsubmit = function() {
     var oldCookie = document.cookie;

     var cookiePoll = setInterval(function() {
         if(oldCookie != document.cookie) {
             // stop polling
             clearInterval(cookiePoll);

             // assuming a login happened, reload page
             window.location.reload();
         }
     },1000); // check every second
}

答案 1 :(得分:0)

在父页面上,您是否因登录而进行了视觉/功能更改?在可能的任何新行动中? 如果没有,那么你不必做任何事情,因为你要检查从父页面的每个动作登录,你可以检查权限以及。

如果有更改或其他功能,您可以使用reloadMe

在父级中调用javascript函数,例如window.opener.reloadMe()

答案 2 :(得分:0)

为什么不只是一个简单的setTimeout

setTimeout(function(){ location.reload(); }, 1000);

有点hacky,但似乎适合你的情况。