從乙個頁面轉向另乙個頁面的請求方式有兩種,post和get.
如果從原理上來**他們的區別,涉及到http傳輸協議的細節,本文不加**,只討論一下表象。
所有的人都知道如下區別:
1.post傳輸資料時,不需要在url中顯示出來,而get方法要在url中顯示。
2.post傳輸的資料量大,可以達到2m,而get方法由於受到url長度的限制,只能傳遞大約1024位元組.
3.post顧名思義,就是為了將資料傳送到伺服器段,get就是為了從伺服器段取得資料.而get之所以也能傳送資料,只是用來設計告訴伺服器,你到底需要什麼樣的資料.post的資訊作為http請求的內容,而get是在http頭部傳輸的。
我們的form表單的method方法,有兩個,post,get.它在頁面傳值的時候的區別也就是上面提到的三點.
先來看一下post方法.
這個方法在asp時代應該跟程式設計師打交道很多的,因為那時候沒有現在的viewstate,每個頁面要恢復原來的狀態,都要將頁面post給自身,然後挨個取值,重新賦值.現在這些瑣碎的事情都讓viewstate代勞了.所以將頁面post給自身的動作,在某種程度上已經被asp.net的程式設計師們忘卻了,所以post也就被大部分的忽視了,這就是技術進步的雙刃劍,帶來方便的同時,蒙上你的眼睛。
viewstate必須包含在的窗體下,而只要包含了"runat="server""的標誌,就甭想post到其他頁面中去,為什麼?老蓋說,我的viewstate是儲存當前頁面狀態的,你要轉到其他頁面,他說,不行,**不認識的引數.如果想post乙個窗體,咋辦?有四種方式可供選擇.
1.在頁面上新建乙個form,不要加上runat="server"的標誌,當然在這個窗體下的控制項也就不用想用viewstate來傳值了.當在其他有runat="server"的窗體的中的按鈕事件中,手動呼叫新建form的submit() 函式.
傳送頁面**如下:
接收頁面
2.通過session取值,在乙個頁面中賦值,在其他頁面中共享,這個方式也被廣泛應用,個人不傾向於用這種方式,我怕造成session值的混亂無序,session用來存一些公共的東西已經累得夠嗆了。
3.通過context傳值,在傳送頁面之前,將需要傳遞到其他頁面的值存在context中。示例**如下:
傳送頁面
接收頁面
4.通過server.transfer的方式。
這個方式在方法三種已經用到了,不過可以在呼叫頁面為要傳遞到被呼叫頁面的值建立屬性(當然可以直接將它設成public),這樣就可以在其他頁面訪問了。
傳送頁面
接收頁面
以上就是post的在不同頁面傳遞資料的方式了。
下面是get方法
我常用的是 傳送頁面
接收頁面
至於response.redirect(url,false)
裡的false
都是response.end()
這個方法惹的禍,老蓋說,寫成
false
就好了,因為預設是
true
。我都轉向其他頁面了,還不讓我終止原來頁面的響應,
bt!
談Ajax的Get和Post的區別
get方式 用get方式可傳送簡單資料,但大小一般限制在1kb下,資料追加到url中傳送 http的header傳送 也就是說,瀏覽器將各個表單字段元素及其資料按照url引數的格式附加在請求行中的資源路徑後面。另外最重要的一點是,它會被客戶端的瀏覽器快取起來,那麼,別人就可以從瀏覽器的歷史記錄中,讀...
get和post的區別
在b s應用程式中,前台與後台的資料互動,都是通過html中form表單完成的。form提供了兩種資料傳輸的方式 get和post。雖然它們都是資料的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對資料產生嚴重的影響。雖然為了方便的得到變數值,web容器已經遮蔽了二者的一些差異,但是了解二者的...
post和get的區別?
1.get是從伺服器上獲取資料,post是向伺服器傳送資料。get 和 post只是一種傳遞資料的方式,get也可以把資料傳到伺服器,他們的本質都是傳送請求和接收結果。只是組織格式和資料量上面有差別,http協議裡面有介紹。2.get是把引數資料佇列加到提交表單的action屬性所指的url中,值和...