`
javatim
  • 浏览: 68226 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

window.open url 参数post方式传递

 
阅读更多

[转]window.open url 参数post方式传递

http://blog.csdn.net/youlianying/article/details/5468342

最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容。虽然不怎么麻烦,但是如果内容么有在数据库里保存,仅仅是处以拟稿状态时,就不能实现了,用户还常常认为是个bug。考虑采用get的方式传递,把需要的内容都序列化然后,通过url去传,显得很臃肿,而且get的传递内容长度有限制。于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法整了这么一个两者结合的方式,将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中。
    比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口。代码中只传递了一个参数内容,实际可传递多个。
具体代码如下:

function openPostWindow(url,name,data)  
     {  
         var tempForm = document.createElement("form");  
         tempForm.id="tempForm1";  
         tempForm.method="post";  
         tempForm.action=url;  
         tempForm.target=name;  
         
         var hideInput = document.createElement("input");  
         hideInput.type="hidden";  
         hideInput.name= "content"
         hideInput.value= data;
         tempForm.appendChild(hideInput);   
         tempForm.attachEvent("onsubmit",function(){ openWindow(name); });
         document.body.appendChild(tempForm);  
         
         tempForm.fireEvent("onsubmit");
         tempForm.submit();
         document.body.removeChild(tempForm);

 

         return false;
    }
    
     function openWindow(name)  
     {  
         window.open('about:blank',name,'height=400, width=400, top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes,location=yes, status=yes');   
     }  
    </script>

 

   调用:

   <A href="javascript:void(0);" onClick="openPostWindow('noWriteSiteInfo.jsp','noWriteSiteInfo','<%=lowerOffset %>');">
       这里是调用;  
     </A>

 

注意红色部分 如果没有这个,会导致页面上<jsp:include page=""/> 这种页面丢失,这是 链接的href 和 onclick 共存问题,

请求的链接是用的 A 标签,A上同时写了href和onclick事件。对于链接 A 标签而言,当用户鼠标单击的时候,A对象被触发时会首先去执行onclick部分,然后是href。

 

解决方法就是:

直接把onclick事件写在href中:href="javascript:openPostWindow(。。。)" 
还有一种解决方案:<a href="javascript:void(0)" onclick="do();return false;">Test</a>
这样是忽略了href部分,这对于通过onclick传递this,或者无法避开a对象时都有用。

 

 

 

 

 

以上方法还有一个问题,就是在IE浏览器可以运行,但是在FIREFOX中就会有问题。
通过以上代码中的红色部分,可以让firefox也正常。
修改后代码如下:
  1. if(tempForm.attachEvent){  
  2.         tempForm.attachEvent("onsubmit",function(){openWindow(name);});  
  3.     } else {  
  4.         tempForm.addEventListener("submit",function(){openWindow(name);},false);   
  5.     }  
  6.     document.body.a(tempForm);   
  7.     if (tempForm.fireEvent) {  
  8.         tempForm.fireEvent('onsubmit');  
  9.         tempForm.submit();  
  10.     } else if (document.create_rEvent) {  
  11.         var ev = document.create_rEvent('HTMLEvents');  
  12.         ev.initEvent('submit'falsetrue);  
  13.         tempForm.dispatchEvent(ev);  
  14.     }  

分享到:
评论

相关推荐

    window.open()实现post传递参数

    在实际项目中,常常遇到这样的需求,即实现子系统页面之间...故想改用post方式提交,隐藏提交过程中参数的传递。首先想到ajax提交,但是两个参数的传递会存在问题,ajax提交与window.open()会使得action走两遍,因此舍

    window.open以post方式将内容提交到新窗口

    于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法

    在Js页面通过POST传递参数跳转到新页面详解

    最近在工作中遇到一个需求,有个页面 a.vm,对 ajax 请求的结果进行判断后,获取结果里面的数据传递给一个 URL(b.htm),跳转到新的页面 b.htm。 遇到的问题 因为一开始是 GET 请求,所以当传递的数据过大的时候,...

    js使用post 方式打开新窗口

    但是由于我希望传递参数到服务端,而且参数看起来很长一串,而且get方式的提交参数长度是有限制的,因此我有以下需求: 1,js中实现post提交 2,返回的页面在新窗口显示 首先我是这么做的: 代码如下:  $.ajax({ ...

    js使用小技巧

    网页传递参数 location.search(); 可编辑 obj.contenteditable=true 执行菜单命令 obj.execCommand 双字节字符 /[^x00-xff]/ 汉字 /[u4e00-u9fa5]/ 让英文字符串超出表格宽度自动换行 word-wrap: ...

    ASP.NET程序中常用的三十三种代码.txt

    表格超连接列传递参数 号" DataTextField="id" NavigateUrl="aaa.aspx?id=’  &lt; %# DataBinder.Eval(Container.DataItem, "数据字段1")%&gt;’ & name=’&lt;% # DataBinder.Eval(Container.DataItem, "数据字段2")%&gt;’ /...

    ASP.NET常用代码

    6.表格超连接列传递参数 号" DataTextField="id" NavigateUrl="aaa.aspx?id='&lt;%# DataBinder.Eval(Container.DataItem, "数据字段1")%&gt;' & name='&lt;%# DataBinder.Eval(Container.DataItem, "数据字段2")%&gt;' /&gt; 7....

    ubichr:适用于Chrome的普遍性

    open command like window (Ctrl+Space) 执行带参数的命令并预览结果 打开新标签并传递 GET 或 POST 参数(维基百科搜索、字典查找、翻译文本) 通过ajax获取数据,处理它并在扩展弹出预览中显示(例如:IMDB电影...

    java 面试题 总结

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect...

    超级有影响力霸气的Java面试题大全文档

     forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...

Global site tag (gtag.js) - Google Analytics