今天寫到兩個頁面傳值,剛開始通過url上加參數進行傳值,
var strLink = "my.asp?str1=" + str1List + "&str2=" + str2List ;
var iHeight = 600; // 高度
var iWidth = 1000; // 寬度
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; // 獲得窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; // 獲得窗口的水平位置;
window.open(strLink, "_blank", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)
其中str1List是一個單號的列表,str2是另外一個單號的列表,將參數傳到my.asp,然后用Request.QueryString獲取參數的值進行處理,剛開始my.asp頁面運行沒有問題,可是當單號的數據量比較大的時候,my.asp頁面就報錯。經過排查,發現參數傳到my.asp后,str1List數量少了,str2List沒了,才知道應該是url傳值時,數據沒截掉了。
然后上網查了一下,發現url是有長度限制了,網上是這樣說的:
通過URL傳值的問題,所以對url字符串進行encodeURIComponent對url字符串內容進行編碼,問題解決,但是有時候會出現 The request filtering module is configured to deny a request where the query string is too long,問題的原因是 以get方式傳字符串的時候,有長度限制。
IIS 7對於Query String有長度限制。默認為2048.
該問題的解決辦法可以通過修改configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.
<requestLimits maxQueryString="length" />
各瀏覽器與各Web Server對URL均有長度的限制如下:
在http協議中,其實並沒有對url長度作出限制,往往url的最大長度和用戶瀏覽器和Web服務器有關,不一樣的瀏覽器,能接受的最大長度往往是不一樣的,當然,不一樣的Web服務器能夠處理的最大長度的URL的能力也是不一樣的。
下面就是對各種瀏覽器和服務器的最大處理能力做一些說明.
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個字符時,出現如下服務器錯誤:
寫道
Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80
Apache (Server)
能接受最大url長度為8,192個字符。
Microsoft Internet Information Server(IIS)
能接受最大url的長度為16,384個字符。
通過上面的數據可知,為了讓所有的用戶都能正常瀏覽,我們的URL最好不要超過IE的最大長度限制(2038個字符),當然,如果URL不直接提供給用戶,而是提供給程序調用,側這時的長度就只受Web服務器影響了。
可能有些朋友會想當然的認為,如果最大長度限制為2038字符,是不是參數差不多可以傳遞1000個左右的漢字。這樣認為其實是不對的,對於中文的傳遞,最終會為urlencode后的編碼形式進行傳遞,如果瀏覽器的編碼為UTF8的話,一個漢字最終編碼后的字符長度為9個字符。
這是網上引用過來的,總的來說,就是不同的瀏覽器對url都有不同的長度限制的。
這樣的話,我上面的問題句真的不能用url傳值了,因為我的str1List和str2List長度是不定了,只能想其他途徑了。
經過一番琢磨,發現使用建議使用表單+POST方法傳參,這樣就沒有大小限制了。
其實我是要把當前頁面<form action="my.asp" method="post">
然后跳到my.asp頁面后,用request.Form獲取參數值就可以了。
但是我的當前頁面還不能這樣做,因為form的action已經用戶另一個頁面了,所以還不能這樣做,
最后,通過在button提交的js中寫上提交頁面,如下:
var iHeight = 600; // 高度
var iWidth = 1000; // 寬度
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; // 獲得窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; // 獲得窗口的水平位置;
window.open("", "test", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)
document.forms[0].action = "my.asp“;
document.forms[0].target = "test";
document.forms[0].submit();
然后在跳到my.asp頁面后,用request.Form獲取參數值就可以了。試了一下,數據量比較大時,都沒有問題。