• URL长度过长的问题


    最近项目中很多跨域的问题,有时候跨域要传递很多参数,甚至有时候要传递整个对象,处理的方法是把对象转换成JSON形式的字符串再传递。此时该JSON字符串就比较长,作为参数附加到URL后面,URL就会变得很长,而浏览器和服务器对URL长度是有限制的,因此很容易出错。这里记录一下解决该问题的方法。

    上网查询得知:

    不同浏览器对URL长度的限制不同,不同的Web服务器处理URL的最大长度的能力也不同。

    IE中URL的最大长度是2083字符(资料:http://support.microsoft.com/kb/208427

    解决URL过长的方法:转为使用POST提交数据

    例子:

    <iframe id="iframe1" src="" width="100%" height="740px" frameborder="no"></iframe>

    用Ajax给iframe赋src值,$("#iframe1").src=url;

    问题:当url很长时,很可能超出浏览器和服务器对url长度的限制。

    第一种解决方法:

    <iframe id="iframe1" src="proxy/proxytest.jsp" width="100%" height="740px" frameborder="no"></iframe>

        src中链JSP页面,proxytest.jsp内容如下:

    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <body>
    	<form id="test" action="" method="post">
    		<input id="testId1" type="hidden" name="testId1"/>
    		<input id="testId2" type="hidden" name="testId2"/>
    	</form>
    </body>
    </html>
    

        form中的action为空,提交方式是POST,有隐藏域,该<input type="hidden"/>是要提交到后台的参数,所以在Struts2中name值和后台接收的参数保持一致。

        使用的时候,JS如下:

    document.getElementById("iframe1").contentWindow.document.getElementById("testId1").value="<s:property value='testId1'/>";
    document.getElementById("iframe1").contentWindow.document.getElementById("testId2").value="<s:property value='testId2'/>";
    document.getElementById("iframe1").contentWindow.document.getElementById("test").setAttribute("action",url);
    document.getElementById("iframe1").contentWindow.document.getElementById("test").submit();

        js把需要提交到后台的参数值赋给对应的<input type=”hidden”/>,js把url赋给form的action,并提交form,该form提交到包括它的iframe中。因为参数值可以通过<input type=”hidden”/>提交,而不用非要放到url后边,可以很大程度的缩短url的长度。

    第二种解决方法:

    把整个iframe用js构造,而不是像现在这样(HTML把iframe写好,然后js赋给src值)。如:

    $("#iframe1").html("<iframe id ="resultIFrame" name="tag" src=" " + url + " " frameborder="0" scrolling="no" width="100%" height="100%" onload="this.height=tag.document.body.scrollHeight"></iframe>");

        这种方法使用与url比较长但又不是非常长的时候。经试验,如果url特别长,这种方法也就解决不了了。第一种方法就好用多了

  • 相关阅读:
    Qt ‘/‘和‘\‘转化的方式
    Qt 快速转换路径(/斜杠与\反斜杠转换)
    Qt 网络编程:QNetworkAccessManager
    excel vba 单元格内部关键字突出显示改变颜色
    casbin 学习笔记【1】
    Linux
    AJAX
    Spring
    MyBatis
    Oracle查看表空间使用情况
  • 原文地址:https://www.cnblogs.com/mySummer/p/4097811.html
Copyright © 2020-2023  润新知