http編程中的get和post混合使用方式[摘自網上]

來源:互聯網
上載者:User
問題來源於get和post的特點和限制。對於get請求,我們可以很方便的使用window.opener的方式與父頁面進行通訊,但是根據http協議的規定,url最大長度是2083個位元組,可以用於GET傳遞資料的長度是2048個位元組。對於post請求,雖然沒有最大長度的限制,卻不能方便的使用window.opener與父頁面進行通訊。
關於如何使用javascript自動將一段get請求轉變成一個post請求,網上有很多的方法,其主要思想就是動態構造一個iframe,並將get請求中的url參數值賦給input控制項,最後設定form的action地址並調用submit方法。
園子裡有人已經給出一個解決方案,http://www.cnblogs.com/ppchen/archive/2008/03/18/1109607.html
這裡轉載如下:Code
var PostNewWin = function(url){
    var urlArr = 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();
};

例如原來有一個函數,使用get請求開啟新頁面
function openNewWindow()
{
      var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;
      var win =window.open(url);
}
因為ur的長度問題,現在改為使用post方式提交,如下所示:
function openNewWindow()
{
      var url = http://www.website.com/page1.aspx?p1=v1&p2=v2;
      //var win =window.open(url); 
      PostNewWin(url);
}

這裡有一個問題就是,使用這種方式後,就無法使用window.opener與父頁面進行互動了,因為通過這個函數,已經將get請求變成一個post請求了。為了可以使用post的方式提較大資料,同時也可以使用window.open(url)方式的window.opener與父頁面通訊,在這裡做一點小的改版,首先使用window.open(url)時候,增加一個參數,指定開啟視窗的名稱,,如下所示:
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函數,將這個新視窗的控制代碼傳遞給這個函數,將post請求的target設定為這個參數,如下所示:
var PostNewWin = function(url,winName){
      .........
               form.target = winName; 
      .......
};
這樣就可以同時使用post和get兩種方式的優點了。

========================================================

比sharepoint更強大的表單功能,圖形化的流程設計,與asp.net完美結合,支援vs.net編程擴充

========================================================

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.