用URL傳值的瀏覽器最大長度限制
1:問題描述:畫面上是有一個table,table上表示了有很多文件的。用戶可以操作選擇表格中一條,或者多條,然後點擊畫面上的一個下載button。
如果是分別一條一條的下載沒有問題,用firefox一次下載多條也沒有問題;但是如果用IE9的一次性下載多條的話,就會出錯。
2:原因:經過調查發現是從當前頁面網download畫面傳值的時候,所有的文件名都是用URL傳遞的,用submit方法一次提交到後臺。
所以考慮是不是因爲URL長度不夠,上網調查之後,下面是一位同學調查的結果,直接拿過來用。還有網友說是URL的長度是由瀏覽器和web服務器
共同限定的。
Microsoft Internet Explorer (Browser)
IE瀏覽器對URL的最大限制爲2083個字符,如果超過這個數字,提交按鈕沒有任何反應。
Firefox (Browser)
對於Firefox瀏覽器URL的長度限制爲65,536個字符,但當我測試時,最大隻能處理8182個字符,這是因爲url的長度除了瀏覽器限制外,還會受Web服務器的限制。
Safari (Browser)
URL最大長度限制爲 80,000個字符。
Opera (Browser)
URL最大長度限制爲190,000個字符。
Google (chrome)
url長度一旦超過8182個字符時。
3:解決方法: 用submit的post方法,然後根據傳遞的值,動態的添加hidden元素。把傳遞參數的值賦給hidden。
因爲是用post請求的話,hidden的值是存放在header中。而不是通過url傳遞的。post請求傳遞的長度只和web服務器有關,和瀏覽器無關。
4:下面是添加和刪除畫面元素的代碼,僅供參考
添加:
var input = document.createElement( 'input' );
input.setAttribute( 'type' , 'hidden' );
input.setAttribute( 'name' , '參數名' )
input.setAttribute( 'value' , ‘參數值’ );
form.appendChild( input );
刪除:
var inputAry = document.getElementsByName("selectFiles");
var inputCnt = inputAry.length;
if (inputCnt > 0){
for (var i=0; i<inputCnt; i++) {
form.removeChild(inputAry[0]);
}
}