1. 程式人生 > >Ajax傳參中文問題

Ajax傳參中文問題

Ajax傳遞引數是中文的話,需要進行encodeURI轉碼,可分get方法和post方法,建議用post方法傳參,因為get方法傳參長度會有限制,太長傳不了。

以下是post方式

var data= encodeURI(data);  //post方式傳的話,encodeURI一次就可以了
        	$.ajax({
    		    url:"test!xxx.action",
    		    dataType: "json",
    		    cache:false,
    		    data:{data:data},
    		    type:"post",
    		    success: function(data, status) {
			...
			},
		error: function(xhr, desc, err) {
    		    	
    		    },
    		 complete: function(){
    		
       		    }

後臺解碼方式如下:

String text = URLDecoder.decode(data, "UTF-8");

如果用get,很多人喜歡才url後面傳參

var data= encodeURI(encodeURI(data));  //post方式傳的話,encodeURI一次就可以了
        	$.ajax({
    		    url:"test!xxx.action?data=" + data,
    		    dataType: "json",
    		    cache:false,
    		    type:"get",
    		    success: function(data, status) {
			...
			},
		error: function(xhr, desc, err) {
    		    	
    		    },
    		 complete: function(){
    		
       		    }


這樣的話,需要特別注意:

var data= encodeURI(encodeURI(data)); 

要encodeURI兩次,而post只需要1次,為什麼url傳需要encodeURI兩次呢?

這是因為,encodeURI後,如:“我”,會被encodeURI成%E6,,通過url傳,%是特殊字元,需要再轉一次,將% encode成%25才行,否則%E6會被自動識別其他字元,所以通過url傳需要encodeURI兩次,傳到後臺接收引數時才會識別成%E6,再轉才有效。

而post是直接傳參,是不會存在%特殊字元被轉問題,所以不需要encodeURI兩次。

get和post後臺解密方法都一樣。