`
yuxuguang
  • 浏览: 139149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

window.open以post方式提交

阅读更多

第一种方式

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

    

<script>

function openPostWindow(url, data, name)  

  {  

     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);

}



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>

 

第二种方式

  

function openWindowWithPost(url,name,keys,values)
{
    var newWindow = window.open(url, name);
    if (!newWindow)
        return false;
        
    var html = "";
    html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>";
    if (keys && values)
    {
       html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>";
    }
    
    html += "</form><script type='text/javascript'>document.getElementById('formid').submit();";
    html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, ""); 
    newWindow.document.write(html);
    
    return newWindow;
}

 

 

推荐使用第一种方式,第二种方式测试过程中发现,与日历弹出框冲突,如果子页面上有日历弹出框,则点日历框会不停刷新页面,不会弹出日历框。当然,也可能是我用的日历框的问题。

分享到:
评论
2 楼 a1219542638 2017-03-14  
我试了一下,没成功-。-
1 楼 流浪的我蜗牛 2013-09-24  
没有作用啊

相关推荐

    window.open方法post请求

    使用window.open()方法发送post请求

    js弹窗并返回值(window.open方式)

    在JavaScript中,`window.open`方法是一个非常实用的功能,它允许开发者创建新的浏览器窗口或标签页,并在其中加载指定的网页内容。这个方法在交互式用户界面设计中尤其常见,例如用于显示警告、确认对话框或者...

    javascript 打开页面window.location和window.open的区别.docx

    - 在某些情况下,浏览器可能会自动阻止 `window.open` 创建的弹窗,以减少对用户的干扰。 #### 六、其他注意事项 - **刷新页面**:如果需要刷新当前页面,可以使用 `window.location.reload()` 方法。 - **跨域限制...

    window.open 以post方式传递参数示例代码

    本文将详细介绍如何使用`window.open`以POST方式传递参数,并提供一个示例代码。 首先,理解`window.open`的基本用法。它接受两个主要参数:`url`和`name`,以及可选的`features`参数,用于定义新窗口的特性。例如...

    window.open父子窗口传值问题

    在Web开发中,`window.open` 是一个JavaScript函数,它用于打开新的浏览器窗口或标签页。这个函数在处理用户交互,比如点击按钮打开新页面,或者在不同窗口间传递数据时非常常见。当我们谈论“window.open父子窗口...

    window的open方法把get请求转成post请求处理方式逻辑

    根据实际的开发项目整理的一个window的open方法把get请求转成post请求处理方式逻辑,由于window.open方法的get实现时,请求传入的参数长度不能超过2000这样一个字符长度,故需转换成post请求处理方式达到既能用到...

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

    第一种方式 最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的...如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法

    js window.open iframe dialog

    在JavaScript的世界里,`window.open`、`iframe`和`dialog`是三个非常重要的概念,它们在网页交互和页面通信中扮演着关键角色。这里我们将深入探讨这些知识点,并结合实例来帮助你理解它们的用法。 1. `window.open...

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

    然而,当需要通过POST方式传递参数时,`window.open()` 默认的GET方式就无法满足需求了。 在上述描述中,提到的问题是在SSH框架下,URL长度受限且需要隐藏某些参数,因此需要寻找一种方式来通过POST传递参数。一种...

    showModalDialog和window.open

    - 使用`window.open`时,数据交互需要通过其他方式实现,如使用`postMessage`API。 综上所述,`showModalDialog`和`window.open`各有优势和局限性,开发者应根据具体需求选择合适的方法。在现代Web开发中,由于`...

    windowOpen打开新窗口

    在Web开发中,`window.open()` 是一个非常重要的JavaScript函数,用于在用户的浏览器中打开新的窗口或标签。这个函数在创建交互式用户体验时扮演着关键角色,允许开发者控制新窗口的大小、位置以及加载的URL。现在...

    window.open的页面如何刷新(父页面)上层页面

    在网页开发中,`window.open` 是一个常用的 JavaScript 函数,用于在新的浏览器窗口中打开一个新的页面或 URL。然而,在一些交互场景下,比如子页面(由 `window.open` 创建的页面)需要与父页面(打开子页面的那个...

    详解window.open被浏览器拦截的解决方案

    在网页开发中,有时会遇到使用`window.open`方法创建新窗口被浏览器拦截的问题,这主要是因为浏览器的安全策略。浏览器为了防止恶意脚本无休止地弹出窗口,会对非用户交互触发的`window.open`调用进行拦截。本文将...

    HTML5如何用window.postMessage在网页间传递数据

    window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作...

    Window.Open如何在同一个标签页打开

    在这个 `openPostWindow` 函数中,创建了一个临时的隐藏表单,并设置了其提交方式为 POST,这样可以在后台向指定的 `url` 发送数据。`target` 参数决定了提交的结果会在哪个窗口或标签页显示。当 `target` 为 "_...

    利用HTML5的window.postMessage实现跨域通信

    1. **跨窗口通信**:当一个页面打开另一个页面(如新窗口、`window.open`或`window.navigate`),它们可以通过`postMessage`通信。 2. **跨`iframe`通信**:父页面与`iframe`或多个`iframe`之间的通信,特别是当`...

    通过window.opener控制父窗体

    在Web开发中,有时我们需要在弹出的子窗口与打开它的父窗口之间进行通信。...在实际应用中,要结合`postMessage`等技术以适应更复杂的跨窗口交互需求。在开发过程中,务必遵循最佳实践,确保用户的隐私和数据安全。

Global site tag (gtag.js) - Google Analytics