2015-10-13 52 views
2

請看看下面的代碼如何發送表單提交給servlet的時間?

<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它。但是,在我的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或通過任何其他方法的時間?

+0

連日期值之前,您的形式會得到提交被設置並通過表單傳遞。相反,您可以將提交按鈕更改爲普通按鈕,然後點擊按鈕即可設置日期,然後提交表單。 – NightsWatch

+0

如果您需要表單提交時間戳,爲什麼需要在客戶端進行設置,您甚至可以在服務器端使用方法中的第一行代碼作爲請求到達服務器的時間戳來實現此目的。這是我的意見。 – NightsWatch

回答

3

這些行:

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

...只是更新action變量。該變量與表單的action屬性沒有連續的連接。

你也不需要再次查詢表格,它的在你的submit回調。

要更新形式的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()); 

附註:全部客戶端發送的信息可能會被欺騙,因此請記下收到的日期/時間。特別是,你不能依靠它來知道表單何時被髮送。要知道這一點,請使用服務器上的代碼來記錄接收到的日期/時間,這隻會在毫秒後。

+0

關於最後的評論,實際上我們需要的是創建記錄的時間,這應該是用戶的時間,而不是服務器。所以,也許有更好的方法? –

+0

@TeranceWijesuriya:創建記錄後,將該日期/時間以ISO-8601格式[JavaScript支持的子集]返回給客戶端(http://www.ecma-international.org/ecma-262/6.0/index .html#sec-date-time-string-format),並讓客戶端從該ISO字符串中創建一個Date,結果Date對象將有多種方法('getHours'等)給你日期/本地時間的時間(以及'getUTCHours'等等,以UTC爲單位給你的日期/時間)。確保你發回的字符串有一個時區,否則你會陷入瀏覽器特定的困境。 IE8不支持。 :-) –

0

將正確的ID添加到表單後添加一個隱藏的輸入;

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

和使用:

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

您可以簡單地添加一個隱藏字段來捕獲日期:

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>