Ajax傳參中文問題
阿新 • • 發佈:2019-01-03
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後臺解密方法都一樣。