淺析get和post在HTTP編程中的使用方式
本文將要介紹如何在HTTP編程中,get和post兩個關(guān)鍵字的混合用法,希望通過本文,能對關(guān)鍵字的最大長度以及功能有所了解。
問題來源于get和post的特點(diǎn)和限制。對于get請求,我們可以很方便的使用window.opener的方式與父頁面進(jìn)行通訊,但是根據(jù)http協(xié)議的規(guī)定,url最大長度是2083個字節(jié),可以用于GET傳遞數(shù)據(jù)的長度是2048個字節(jié)。對于post請求,雖然沒有最大長度的限制,卻不能方便的使用window.opener與父頁面進(jìn)行通訊。
關(guān)于如何使用javascript自動將一段get請求轉(zhuǎn)變成一個post請求,網(wǎng)上有很多的方法,其主要思想就是動態(tài)構(gòu)造一個iframe,并將get請求中的url參數(shù)值賦給input控件,最后設(shè)置form的action地址并調(diào)用submit方法。
園子里有人已經(jīng)給出一個解決方法,http://www.cnblogs.com/ppchen/archive/2008/03/18/1109607.html
這里轉(zhuǎn)載如下:
- Code
- var PostNewWin = function(url){
- var urlurlArr = url.split("?");
- var postUrl = urlArr[0];
- var postData = urlArr[1];
- var iframe = document.getElementById("postData_iframe");
- if(!iframe){
- iframe = document.createElement("iframe");
- iframe.id = "postData_iframe";
- iframe.scr= "about:blank";
- iframe.frameborder = "0";
- iframe.style.width = "0px";
- iframe.style.height = "0px";
- var form = document.createElement("form");
- form.id = "postData_form";
- form.method = "post";
- form.target = "_blank";
- document.body.appendChild(iframe);
- iframe.contentWindow.document.write("<body>" + form.outerHTML + "</body>");
- }
- iframe.contentWindow.document.getElementById("postData_form").innerHTML = "<input name='postData' id='postData' type='text' value='" + postData + "'/>";
- iframe.contentWindow.document.getElementById("postData_form").action = postUrl;
- iframe.contentWindow.document.getElementById("postData_form").submit();
- };
例如原來有一個函數(shù),使用get請求打開新頁面
- function openNewWindow()
- {
- var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;
- var win =window.open(url);
- }
因?yàn)閡r的長度問題,現(xiàn)在改為使用post方式提交,如下所示:
- function openNewWindow()
- {
- var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;
- //var win =window.open(url);
- PostNewWin(url);
- }
這里有一個問題就是,使用這種方式后,就無法使用window.opener與父頁面進(jìn)行交互了,因?yàn)橥ㄟ^這個函數(shù),已經(jīng)將get請求變成一個post請求了。為了可以使用post的方式提較大數(shù)據(jù),同時也可以使用window.open(url)方式的window.opener與父頁面通訊,在這里做一點(diǎn)小的改版,首先使用window.open(url)時候,增加一個參數(shù),指定打開窗口的名稱,,如下所示:
- function openNewWindow()
- {
- var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;
- var winName = "";
- var win =window.open("about:blank",winName );
- PostNewWin(url,winName);
- }
- 同時修改PostNewWin函數(shù),將這個新窗口的句柄傳遞給這個函數(shù),將post請求的target設(shè)置為這個參數(shù),如下所示:
- var PostNewWin = function(url,winName){
- .........
- form.target = winName;
- .......
- };
這樣就可以同時使用post和get兩種方式的優(yōu)點(diǎn)了。
原文標(biāo)題:http編程中的get和post混合使用方式
鏈接:http://www.cnblogs.com/chegan/archive/2009/09/28/1575536.html
【編輯推薦】