作者arliang (arliang)
看板Ajax
標題[問題] jquery 的ajax如何傳中文值
時間Mon Sep 6 10:43:31 2010
jQuery.ajax({
url: "
http://"+serverIP+"/rcv/reg.do",
data: "method=executeAdd&queryCaseNo="+"中文喔",
dataType: 'xml',
contentType: "text/html; charset=big5",
error: function(xhr) {
$('errMsg').innerHTML = "Ajax request 發生錯誤";
alert('Ajax request 發生錯誤');
},
success: function(response) {
parserAddResult(response,'add');
location.href="
#rcvDataHref";
}
});
其中contentType 我試過 big5 、 UTF-8、ISO8859-1
每次後端接到的中文都是亂碼
也爬過文,
http://www.showfan.cn/share.php?pid=171
不想使用URL 編碼、也不想在struts後端做字碼轉換、
難道真的只能使用傳統的ajax嗎?
requester.open("POST","
http://"+serverIP+"/rcv/reg.do",true);
requester.onreadystatechange=function() {getQueryResult("AddResult")};
requester.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
requester.send("method=executeAdd"+sendStr);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.175.188
※ 編輯: arliang 來自: 59.120.175.188 (09/06 10:46)
1F:→ TonyQ:如果後端接到的是亂碼,那我覺得是你後端接錯的可能性 09/06 10:46
2F:→ TonyQ:比較高. 09/06 10:46
3F:→ TonyQ:還是你用傳統的ajax接到的就會是正常的中文 ? @_@ 09/06 10:46
4F:→ TonyQ:環境給多一點比較好判斷 09/06 10:46
我後來改用傳統的ajax,就會是正常中文,後端sever是UTF-8編碼、jdk 1.5、tomcat
前端網頁也是utf-8編碼,firefox。謝謝~
※ 編輯: arliang 來自: 59.120.175.188 (09/06 12:04)
5F:→ TonyQ:(思)附上你傳統ajax作法的code上來應該會比較清楚 09/06 14:31
文末的code 就是傳統的ajax,但是內容有省略
以下是完整的code
var requester = null;
if(window.XMLHttpRequest) {
try {
requester = new XMLHttpRequest();
} catch(e) {
requester = null;
}
// branch for IE/Windows ActiveX version
} else if(window.ActiveXObject) {
try {
requester = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
requester = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
requester = null;
}
}
}
var serverIP = '<%=request.getServerName()+":"+
request.getServerPort()+
request.getContextPath() %>';
requester.open("POST","
http://"+serverIP+"/rcv/reg.do",true);
requester.onreadystatechange =
parserAddResult(requester.responseXML,"add");
requester.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
requester.send("method=executeAdd&queryCaseNo="+"中文喔");
function parserAddResult(xmlDoc,actionType){
if (actionType == "add"){
......
}else if .........
}
謝謝~
※ 編輯: arliang 來自: 59.120.175.188 (09/06 14:56)
6F:推 s25g5d4:先將傳送的資料encode一下? 09/06 18:59
7F:→ TonyQ:我在猜會不會是post跟get的差異? ajax default是get 09/06 19:03
8F:→ TonyQ:加上type 參數給 POST 看看? 09/06 19:04
9F:→ TonyQ:content-type 應該不用給,那理論上不會有影響. 09/06 19:04
10F:→ TonyQ:default的context-type是 09/06 19:05
11F:→ TonyQ:'application/x-www-form-urlencoded' 09/06 19:05
12F:→ TonyQ:所以應該不用另外給才對 09/06 19:05
13F:→ TonyQ:看看這樣能不能幫上忙 :) 09/06 19:05
14F:推 adahsu:我有遇到在 IE 時一定要在 context-type 加 charset 才行 09/07 10:00
15F:→ TonyQ:除非charset 環境不同 09/07 10:59
16F:→ TonyQ:不然應該沒有 contenxt-type 一定要加 charset 的情形. 09/07 11:00
17F:→ TonyQ:至少在常態的環境下這個不是必須的。(基本上我沒寫過要改 09/07 11:00
18F:→ TonyQ:context-type 的application,唯一的例外就是 utf-8 跟big5 09/07 11:00
19F:→ TonyQ:溝通。) 09/07 11:00
TonyQ 大大說對了
正解~感激不盡~
答案是POST與GET的差異造成中文傳到後端變亂碼
contenxt-type 可以不用加
至少FF 與 IE7 都試過了,
我先提供簡單的Code給各位參考
1. 第一種
jQuery.ajax({
type: 'POST',
dataType: 'xml',
url: "
http://"+serverIP+"/rcv/reg.do",
data: "method=executeAdd&queryCaseNo=我是中文",
error: function(xhr) {
alert('Ajax request 發生錯誤');
},
success: function(response) {
alert('好棒喔');
}
});
url: "
http://"+serverIP+"/rcv/reg.do",
data: "method=executeAdd&queryCaseNo=我是中文",
error: function(xhr) {
alert('Ajax request 發生錯誤');
},
success: function(response) {
alert('好棒喔');
}
});
2. 第二種
jQuery.post("
http://"+serverIP+"/fcms/rcv/registration.do",
"method=executeAdd&queryCaseNo=我是中文",
function(response){
alert('好棒喔');
},
"xml"
);
※ 編輯: arliang 來自: 59.120.175.188 (09/07 11:35)
20F:推 adahsu:因為就是遇到不加不行啊... 只有 IE6/7/8 有此問題... 09/13 12:31
21F:→ TonyQ:有可能是我看得不夠多 XD 不過是什麼情形不這樣寫不會過啊? 09/13 23:02
22F:→ TonyQ:你看原po也說他沒寫還是過了啊 XD 09/13 23:02