如何覆盖远程表单操作URL?

时间:2015-03-12 19:23:07

标签: javascript php jquery forms

在网址 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 ,只需将表单流程和模式关闭?

2 个答案:

答案 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告诉浏览器一切正常,不再显示模式