Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-在表单提交后重新加载页面,目标为“_“空白”;_Javascript_Jquery_Submit_Reload_Target - Fatal编程技术网

Javascript-在表单提交后重新加载页面,目标为“_“空白”;

Javascript-在表单提交后重新加载页面,目标为“_“空白”;,javascript,jquery,submit,reload,target,Javascript,Jquery,Submit,Reload,Target,我正在努力实现以下目标: 在A页上,我们有一个到B页的访问限制链接。访问限制在服务器端用PHP处理。 当用户单击指向页面B的链接时,我们会在页面a上显示一个带有表单的模式对话(通过javascript),并将链接的href(B)作为操作。(给用户一个即时反馈。回退是将他重定向到一个登录表单,该表单将他重定向到他想要访问的站点。) 这个系统运行得很好 但现在我的问题来了: 我们有访问受限链接,应该在新窗口中打开。 现在,如果我在表单上使用target=“\u blank”,则用户在其来自(A)的页

我正在努力实现以下目标:
在A页上,我们有一个到B页的访问限制链接。访问限制在服务器端用PHP处理。
当用户单击指向页面B的链接时,我们会在页面a上显示一个带有表单的模式对话(通过javascript),并将链接的href(B)作为操作。(给用户一个即时反馈。回退是将他重定向到一个登录表单,该表单将他重定向到他想要访问的站点。) 这个系统运行得很好

但现在我的问题来了:
我们有访问受限链接,应该在新窗口中打开。
现在,如果我在表单上使用target=“\u 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太可怕了

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


如果有更改或附加功能,您可以使用
window.opener.reloadMe()

调用父级中的javascript函数,例如
reloadMe
,假设您将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
}

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

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

这有点粗糙,但似乎适合您的情况。

是的,很抱歉说得不够清楚。由于模式对话框可以从任何页面(从导航)打开,因此父页面(页面A)上的更改可能相当大。window.opener在target=“\u blank”窗体打开的窗口中工作吗?我想是的。你有什么问题吗?非常感谢!我采纳了lostsource的建议,因为它更灵活,因为我不必操纵目标页面。你的回答仍然很有价值。很抱歉,我无法升级,因为我刚刚创建了一个帐户。非常感谢!我喜欢这个概念。只是一个小小的补充:如果你不停止间隔这么快的间隔,它会重复甚至在页面可以重新加载之前,使它有效地挂起。因此,我添加了一个清除间隔:
var ri=setInterval(function(){if(oldCookie!=document.cookie){//假设发生了登录,重新加载页面清除间隔(ri);window.location.reload();},1000);//每秒钟检查一次