【问题标题】:How to send the time of a form being submitted to servlet?如何将表单提交的时间发送到 servlet?
【发布时间】:2016-01-11 02:08:46
【问题描述】:

请看下面的代码

 <script>
            $(document).ready(function(){
    $("form").submit(function(){
        var text = document.getElementsByName('text')[0].value;
        var action = $("form")[0].action;
        action = action+"?date="+new Date();
        alert(action);
    });
});
        </script>

    </head>
    <body>        


        <form name="test" method="post" action="B">
            <input name="text" type="text">
            <input type="submit" value="Submit">


        </form>

我正在尝试在将表单发送到 servlet 之前将其提交到 URL 的时间。但是在我的 servlet 中的 evrytime 没有显示时间,并且在浏览器 URL 中也没有显示 date 变量。

下面是我的servlet代码供参考

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try
        {
            String print=request.getParameter("date");
            out.print(print);
        } finally
        {
            out.close();
        }
    }

如何通过 URL 或任何其他方法将提交表单的时间发送到 URL?

【问题讨论】:

  • 您的表单将在日期值设置和传递表单之前提交。相反,您可以将提交按钮更改为普通按钮,然后单击按钮,您可以设置日期,然后提交表单。
  • 如果您需要表单提交的时间戳为什么需要在客户端设置您甚至可以在服务器端使用方法中的第一行代码作为请求到达的时间戳来实现这一点服务器。这是我的看法。

标签: javascript jquery html servlets timestamp


【解决方案1】:

这些行:

var action = $("form")[0].action;
action = action+"?date="+new Date();

...只需更新您的 action 变量。该变量与表单的 action 属性没有持续连接。

您也无需再次查找表单,它是您的submit 回调中的this

要更新表单的 action 属性,您必须分配给它:

this.action = this.action + "?" + encodeURIComponent(new Date());

请注意,这将以依赖于浏览器的格式发送日期,这不太可能有用。相反,也许:

this.action = this.action + "?" + encodeURIComponent(new Date().toISOString());

另外,您在 submit 处理程序中执行此操作。在您的各种目标浏览器上,这可能值得再次检查是否足够早。如果没有,请改为在submit 按钮的click 上执行此操作:

$("form input[type=submit]").on("click", function() {
    this.form.action = this.form.action + "?" + encodeURIComponent(new Date().toISOString());
});

或者,作为将其附加到 URL 的替代方法,您可以在表单中添加一个隐藏字段:

<input name="date" type="hidden">

...您从submit 处理程序中填写:

$(this).find("input[name=date]").val(new Date().toISOString());

旁注:所有客户发送的信息都可能被欺骗,因此请谨慎对待您收到的日期/时间。特别是,您不能依靠它来了解表单的实际发送时间。要知道这一点,请使用 服务器 上记录接收日期/时间的代码,这只会在几毫秒之后。

【讨论】:

  • 关于最后一条评论,其实我们需要的是记录创建的时间,应该是用户的时间,而不是服务器的时间。那么,也许有更好的方法?
  • @TeranceWijesuriya:创建记录后,以 ISO-8601 格式 subset that JavaScript supports 将该日期/时间返回给客户端,并让客户端从该 ISO 字符串创建一个 Date --生成的 Date 对象将具有各种方法(getHours 等)为您提供本地时间的日期/时间(以及 getUTCHours 等为您提供 UTC 的日期/时间)。确保您发回的字符串有一个时区,否则您会遇到特定于浏览器的麻烦。不支持 IE8。 :-)
【解决方案2】:

将正确的ID添加到表单后添加隐藏输入;

<input id="clientDate" name="clientDate" type="hidden">

并使用:

$("#form").submit(function(){
   $("#clientDate").val(new Date()); 
});

【讨论】:

    【解决方案3】:

    您可以简单地添加一个隐藏字段来捕获日期:

    var putDate = function(form) {
      form.date.value = new Date().toString();
    };
    <form name="test" method="post" action="B" onsubmit="putDate(this);">
      <input name="text" type="text" />
      <input name="date" type="hidden" />
      <input type="submit" value="Submit">
    </form>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2017-06-19
      • 2011-02-18
      • 2016-09-26
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多