在网址 www.here.com/article1.htm ,我有一个Javascript,用HTML登录表单填写模式,其操作为 www.not-here.com/login。 php 并且身份验证工作正常,除了在完成login.php操作后,浏览器最终在 www.not-here.com/login.php ,而不是保留在URL该模式已激活, www.here.com/article1.htm 。
要指示浏览器保留在 www.here.com/article1.htm ,我首先添加了id =" loginTrigger"在提交输入标记中,如下所示:
<input id="loginTrigger" type="submit" name="doLogin" value="Login">
然后,在我的Javascript中,我添加了一个click事件处理程序来覆盖表单的默认行为,并保留在加载文档时检测到的URL(为简洁起见省略了模态Javascript):
$(document).ready(function(){
hereSecureURL = window.location.protocol;
hereDomain = window.location.hostname;
herePath = window.location.pathname;
hereAnchor = window.location.hash;
hereURL = hereSecureURL + '//' + hereDomain + herePath + hereAnchor;
$('#trigger').click(function(e){
modal.open({content: $form});
});
$('#loginTrigger').click(function(e){
e.preventDefault();
window.location = hereURL;
modal.close();
});
});
如何指示浏览器保留 www.here.com/article1.htm ,只需将表单流程和模式关闭?
答案 0 :(得分:1)
当您提交表单操作时,它会对您的服务器进行POST
调用。验证后,您的服务器应该将该人员重定向到您希望的位置。
有些人使用REFERRER
调用中的POST
参数处理此问题,然后在用户通过身份验证后重定向到REFERRER
。
基本上,您应该使用类似于以下内容的操作呈现表单:
<form action="/login.php?REFERRER=/ThePageIwasOn"... >
您的服务器代码如下所示:
<form action="/login.php?REFERRER=<?php print $_SERVER["HTTP_REFERER"] ?>" ...>
当然,我不知道你正在运行什么样的应用服务器,所以YMMV。
顺便说一下,这只是众多方法中的一种。如果是我,我可能会将价值存储在会话中。我不喜欢暴露这样的价值观。它看起来很糟糕。
编辑:正如Sancao所提到的,它并不总是一个POST请求......好吧,无论如何。第二,他是对的,它可以在$ _GET变量中使用,因为它是一个url param,是的,最好将它隐藏在输入中,特别是如果你&#39 ;重新开始使用HTTPS。
答案 1 :(得分:0)
问题出在这一部分
$('#loginTrigger').click(function(e){
e.preventDefault();
window.location = hereURL;
modal.close();
});
您需要通过模态本身的parentID选择提交按钮
然后尝试modal.close(); ,如果没有工作,请尝试modal.toggle(); 然后你必须检查某些东西才能揭示信息 一个cookie或其他什么,
另一种解决方法是在完全身份验证后将php中的重定向标头发送到1.html页面并写下一个cookie告诉浏览器一切正常,不再显示模式