關於Form的GET和POST

來源:互聯網
上載者:User

      這周又是接到一個朦朧的任務安排,手上沒有接到任何具體的任務,只好自己找事做。自己測試了一下項目,發現問題還不少,特別是切換到不同的局。如:分頁採用的是window.location.href來轉向,即通過串把所有參數都傳到url上,但是這樣做之後切換到不同的局,它也會把sql語句的where串傳到後台,而最初的分類id等條件卻沒有傳過去。翻頁之後切換全宗就會發現返回的資料沒有變。

      解決思路:就是把分頁條件參數如當前頁,頁數,查詢條件,總記錄數,還有一些特殊限制條件如年度,搜尋索引鍵等都作為form表單的一個欄位來提交,而一些共有的參數如分類id等作為url後的參數直接傳遞到後台,通過form.submit()方式來提交。

  如:

       //年度 
   function selectYear(selObj){
        var year=selObj.options[selObj.selectedIndex].value;
 var url= contextPath+'/document/getSpecialMain.do?befrom=topmenu&catName='+escape(encodeURIComponent("分類名稱"))+'&catalogid=<%=catalogid%>&knowledge_code=<%=k_code%>&docyear='+year;
       window.location.href=url;

  }

修改為:

      //年度 
   function selectYear(selObj){

          var year=selObj.options[selObj.selectedIndex].value;
         document.getElementById("docYear1").value=year;


          var url= contextPath+'/document/getSpecialMain.do?befrom=topmenu&catName='+escape(encodeURIComponent("分類名稱"))+'&catalogid=<%=catalogid%>&knowledge_code=<%=k_code%>';

            this.form1.action=url;
            this.form1.submit();
  }

可測試的時候發現後台卻取不到catalogid等參數的值,後台才知原來form沒有設定method方法,預設採用"get"方式。

轉:http://lukejin.yo2.cn/articles/about-form-get-post.html

關於Form的get和post提交的方法,大家應該都知道是什麼概念,
get的本意是為了從伺服器端擷取資料,post是為了向伺服器端發送資料.

而我比較疑惑的是,form的action地址後面帶的參數是不是在get的時候是無效的呢?
也就說: <form action="/helloform/hello?age=22" method="get"><input type="submit"></form>  

 

當提交表單之後,伺服器端是無法擷取age=22這個值的.

帶著這樣的疑問,我通過Maven構建了一個非常簡單的例子,這個例子只涉及一個Servlet類和一個jsp檔案.

下載helloform
你可以將此例子下載後自己調試運行,但你必須有Maven的環境和知道Maven的基礎知識,本例子使用了maven的jetty外掛程式,大大方便了部署.

結論:
經過實踐最後得出了結論

1.form預設的提交方式是get,所以很多時候需要我們自己指定method為post
2.使用get的時候,action=後面自己寫的參數是無法帶到伺服器端的,且get方式提交form的時候,是將form中的索引值以參數的方式拼到url後面的.
3.post方式提交的表單是可以擷取action後面自己寫的參數的.
4.如果表單中存在同名的項,我們可以通過request.getParameterValues("XXX")的方式獲得一個名稱為XXX的值的數組.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.