執行個體解決方案
encodeuri(encodeuri(data)) ///注意兩次編碼!!
$.ajax({
type: "post",
url: url,
data:data,
contenttype :"application/x-www-form-urlencoded;charset=utf-8",
cache: false,
success : viewajax.handle(this.pdomobj, this.div, url) ,
error : viewajax.error(this.pdomobj, this.div, url)
});
java:
string queryvalue = java.net.urldecoder.decode((string)request.getparameter(querycode),"utf-8") ;
方法二
ajax發送請求時預設的編碼是utf-8,前台與伺服器的編碼要統一這已經是不許再重複了,但即使如此,意外還是發生了;;;;;
網頁特效: //注意下面的兩次轉碼,在server端也是進行了兩次轉碼才擷取到正常的資料
$("#querybyname").click(function(){
var name = encodeuri(encodeuri($("#qname").val()));
$.ajax({
type:"post",
url:"querybyname.action",
contenttype :"application/x-www-form-urlencoded;charset=utf-8",
data:{
queryname:name
},
success:function(msg){
$("#signwork").html(msg);
}
})
})
server :struts2
string name =getqueryname();
name =java.net.urldecoder.decode(name, "utf-8");
system.out.println("action......bbbb"+name);
string name01=java.net.urldecoder.decode(name, "utf-8");
system.out.println("............cccc"+name01);
此處用了兩次轉碼才擷取到正確的資料,具體原因分析中;
據說還有另外一種簡單的途徑就是設定
tomcat對設定檔server.xml
uriencoding就ok了
最後發現了問題的根源,其實是我的struts2的設定檔出現了一點點問題
在設定檔中就有這樣一條配置資訊
<constant name="struts.i18n.encoding" value="utf-8"></constant>
這個一定要和頁面的編碼一致,如果使用ajax發送請求的話預設的utf-8編碼,但後台struts設定檔卻是GBK,讓我好生鬱悶!!最後在使用常規action提交時也出現了亂碼,才發現是這裡出現了問題。其實如果全部使用utf-8的編碼方式是不會出現亂碼的