zoukankan      html  css  js  c++  java
  • http编程中的get和post混合使用方式[摘自网上]

    问题来源于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
    这里转载如下:

    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编程扩展

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

  • 相关阅读:
    jquery组件WebUploader文件上传用法详解
    asp.net Forms身份验证详解
    FormsAuthentication使用指南
    对于新手用c#中的delegate(委托)和event(事件)
    Union All/Union/Intersect操作
    DALFactory出现"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .
    C#多线程编程实例 线程与窗体交互
    FormsAuthentication使用指南
    asp.net Forms身份验证详解
    chrome浏览器调试JS代码
  • 原文地址:https://www.cnblogs.com/lifuyun/p/lifuyun09092802.html
Copyright © 2011-2022 走看看