JavaScript中的常見問題解決方案(亂碼,IE緩衝,代理)

來源:互聯網
上載者:User

解決AJAX中文亂碼常用的兩種方法

1. 在用戶端進行encodeURI(utf-8也可以不做,預設),在伺服器端將iso-8859-1編碼轉為utf-8編碼

2.在用戶端進行兩次encodeURI,在伺服器端進行一次轉換。

第2種方法能解決問題的原因:

進行兩次轉換後,在第一次getparameter方法中進行第一次解碼,因為解出來的是英文(第一次encode之後的結果),所以不會出問題;第二次使用URLDecoder的decode方法,所以能正常解決這個問題。需要注意的是,在decode方法中需要指定解碼格式為"utf-8"。很多中文平台使用的並不是utf-8(我猜應該是gb2312),所以decode的預設轉換並不一定是utf-8。

之所以在用戶端進行兩次編碼而在伺服器只進行一次解碼,我猜是Tomcat的緣故。Tomcat為了讓程式員編程方便(get和post用一樣的代碼),所以會自動對post的編碼進行解碼,所以在伺服器端就少了一次手寫的解碼語句。之所以還要再進行一次編碼解碼,是因為Tomcat自動解碼的操作並不一定是按照我們希望的編碼解的,但英文等字元無論在什麼平台上解出的碼都是一樣的,因此可以讓Tomcat自動解譯出第一次編碼後的結果,再手動來解譯encodeURI一次的代碼,就可以獲得自己所需的格式。

補充:現在又觀察了一下瀏覽器的行為,覺得不是Tomcat的緣故,因為在瀏覽器裡的顯示的是中文,而不是編碼後的東西,對於這些個編碼問題現在是一頭霧水,希望知道這方面知識的朋友不吝賜教!

解決IE緩衝的問題
    加一個時間戳記,並且要檢查?

解決代理問題
    要將?轉為$

範例程式碼:
複製代碼 代碼如下:
function verify() {
    //解決中文亂麻問題的方法1,頁面端發出的資料作一次encodeURI,伺服器段使用new String(old.getBytes("iso8859-1"),"UTF-8");
    //解決中文亂麻問題的方法2,頁面端發出的資料作兩次encodeURI,伺服器段使用URLDecoder.decode(old,"UTF-8")
    var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val()));
    url = convertURL(url);
    $.get(url,null,function(data){
        $("#result").html(data);
});
}
//給url地址增加時間戳記,騙過瀏覽器,不讀取緩衝
function convertURL(url) {
    //擷取時間戳記
    var timstamp = (new Date()).valueOf();
    //將時間戳記資訊拼接到url上
    //url = "AJAXServer"
    if (url.indexOf("?") >= 0) {
        url = url + "&t=" + timstamp;
    } else {
        url = url + "?t=" + timstamp;
    }
    return url;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.