zoukankan      html  css  js  c++  java
  • 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特别长,这种方法也就解决不了了。第一种方法就好用多了

  • 相关阅读:
    ios UIWebView截获html并修改便签内容(转载)
    IOS获取系统时间 NSDate
    ios 把毫秒值转换成日期 NSDate
    iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用
    IOS开发 xcode报错之has been modified since the precompiled header was built
    iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
    iOS 切图使用 分辨率 使用 相关总结
    整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
    Java面试之PO,VO,TO,QO,BO
    Notes模板说明
  • 原文地址:https://www.cnblogs.com/mySummer/p/4097811.html
Copyright © 2011-2022 走看看