代码之家  ›  专栏  ›  技术社区  ›  Natkeeran

请求URI太大window.open-解决方法

  •  1
  • Natkeeran  · 技术社区  · 15 年前

    我正在打开一个窗口并将一组参数传递给它。在本例中,我将发送JSON字符串。当时,信息是too large,请求URI太大。

    window.open('../pssops21/php/createPhonePdf.php?strSelectedItems=' 
       + strSelectedItems + '&strQBNumbers=' + arrQBNumbers, 'mywindow', 
       'resizable=1, scrollbars=1, left=80,top=60, width=650, min-height=400')
    

    window.open没有发布选项。jQueryAjax只发布信息,检索结果,不打开新窗口。

    有什么方法可以做到吗?

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Mike Clark    15 年前

    不幸的是,这在Web应用程序中是一个棘手的情况。URI大小的限制通常由您使用的浏览器决定,发布数据的选项不是标准的可用选项。至于执行Ajax发布然后“加载”结果,出于安全原因通常不支持。

    我过去使用的一个变通方法是使它成为一个两步的过程。基本上使用Ajax将JSON数据发布到服务器。作为响应,让服务器返回某种令牌来检索存储的数据。然后,将该令牌用作要打开的新窗口的参数,然后由该窗口检索数据。

    我知道将数据转移到新页面需要做更多的工作,但它确实消除了这些大小/安全限制,而且是跨浏览器安全的。

        2
  •  1
  •   SLaks    15 年前

    您可以打开一个临时页面的新窗口,然后使用原始页面中由javascript填写的表单在新窗口中从该页面发布。

        3
  •  1
  •   DanielMason    15 年前

    您可以使用一个隐藏的表单,该表单以目标页面为目标。使用隐藏字段作为日志值,并使用javascript提交表单 submit() 方法。

    我相信只有当你试图重定向当前窗口,而不是打开一个弹出窗口时,这才有效,尽管也可能有一种方法可以绕过这个限制。

        4
  •  0
  •   Ryan Brunner    15 年前

    您可以直接使用javascript,而不是将信息嵌入到querystring中的窗口中。在新打开的窗口上使用window.opener,可以从子页面访问信息:

    var selItems = window.opener.strSelectedItems;
    

    请记住,在这种情况下,strSelectedItems需要在父页中全局范围。为了保持整洁,我将考虑主页上的函数,它将返回子页需要的信息。