2

我想发出请求以发布以下代码的请求 -

       <html>
       <head>
         <script language="JavaScript">
          function redirect()   {
             if (window.focus)
           self.focus();
                this.location = '/test/GetReports?id=       
           <%=System.currentTimeMillis()+session.getId()%>';
         }
      </script>
    <title>Downloading Document</title>
         </head>
   <body marginwidth='0' marginheight='0' onload='javascript:redirect()'>
   </body>
 </html>

为了实现这一点,我在下面做了 -

   <html>
   <head>
     <script language="JavaScript">
     function redirect()    {
     if (window.focus)
        self.focus();
      location =  '/test/GetReports?id=<%=System.currentTimeMillis()+session.getId()%>';
      var form = document.createElement("form");
      form.setAttribute("method", "post");
      form.setAttribute("action", location);
       form.submit();
      }
   </script>
   <title>Downloading Document</title>
   </head>
    <body marginwidth='0' marginheight='0' onload='javascript:redirect()'>
  </body>
 </html>

但这没有任何区别。这个请求仍然是Get。请让我知道还需要做什么。

谢谢你的帮助!

4

1 回答 1

1

您实际上是使用 POST 表单发送 GET 数据。URL 中指定的参数始终被视为 GET 数据。

为了说明这意味着什么,如果您有一个如下所示的表单:

<form method="post" action="test.html?gid=1">
    <input name="pid" value="2">
</form>

...服务器将接收gid作为 GET 和pidPOST 的值。无论表单使用什么方法,URL 中的任何内容都作为 GET 发送。

因此,要使您的代码正常工作,您需要在表单内创建一个字段,以使其将数据作为 POST 发送。

function redirect() {
    if (window.focus) self.focus();
    loc = '/test/GetReports';   // note: no parameters here
    var form = document.createElement("form");

    // create the input element
    var input = document.createElement("input");
    input.setAttribute("name", "id");
    input.setAttribute("value", <%=System.currentTimeMillis()+session.getId()%>);
    form.appendChild(input);

    form.setAttribute("method", "post");
    form.setAttribute("action", loc);
    form.submit();
}

另请注意,我重命名locationloc--- 你可能会遇到问题,否则location会指向window.location.

于 2013-09-27T20:55:03.580 回答