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特別長,這種方法也就解決不了了。第一種方法就好用多了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM