[問題] [已解決] jquery 的ajax如何傳中文值

看板Ajax作者 (arliang)時間15年前 (2010/09/06 10:43), 編輯推噓3(3019)
留言22則, 3人參與, 最新討論串1/1
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)

09/06 10:46, , 1F
如果後端接到的是亂碼,那我覺得是你後端接錯的可能性
09/06 10:46, 1F

09/06 10:46, , 2F
比較高.
09/06 10:46, 2F

09/06 10:46, , 3F
還是你用傳統的ajax接到的就會是正常的中文 ? @_@
09/06 10:46, 3F

09/06 10:46, , 4F
環境給多一點比較好判斷
09/06 10:46, 4F
我後來改用傳統的ajax,就會是正常中文,後端sever是UTF-8編碼、jdk 1.5、tomcat 前端網頁也是utf-8編碼,firefox。謝謝~ ※ 編輯: arliang 來自: 59.120.175.188 (09/06 12:04)

09/06 14:31, , 5F
(思)附上你傳統ajax作法的code上來應該會比較清楚
09/06 14:31, 5F
文末的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)

09/06 18:59, , 6F
先將傳送的資料encode一下?
09/06 18:59, 6F

09/06 19:03, , 7F
我在猜會不會是post跟get的差異? ajax default是get
09/06 19:03, 7F

09/06 19:04, , 8F
加上type 參數給 POST 看看?
09/06 19:04, 8F

09/06 19:04, , 9F
content-type 應該不用給,那理論上不會有影響.
09/06 19:04, 9F

09/06 19:05, , 10F
default的context-type是
09/06 19:05, 10F

09/06 19:05, , 11F
'application/x-www-form-urlencoded'
09/06 19:05, 11F

09/06 19:05, , 12F
所以應該不用另外給才對
09/06 19:05, 12F

09/06 19:05, , 13F
看看這樣能不能幫上忙 :)
09/06 19:05, 13F

09/07 10:00, , 14F
我有遇到在 IE 時一定要在 context-type 加 charset 才行
09/07 10:00, 14F

09/07 10:59, , 15F
除非charset 環境不同
09/07 10:59, 15F

09/07 11:00, , 16F
不然應該沒有 contenxt-type 一定要加 charset 的情形.
09/07 11:00, 16F

09/07 11:00, , 17F
至少在常態的環境下這個不是必須的。(基本上我沒寫過要改
09/07 11:00, 17F

09/07 11:00, , 18F
context-type 的application,唯一的例外就是 utf-8 跟big5
09/07 11:00, 18F

09/07 11:00, , 19F
溝通。)
09/07 11:00, 19F
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)

09/13 12:31, , 20F
因為就是遇到不加不行啊... 只有 IE6/7/8 有此問題...
09/13 12:31, 20F

09/13 23:02, , 21F
有可能是我看得不夠多 XD 不過是什麼情形不這樣寫不會過啊?
09/13 23:02, 21F

09/13 23:02, , 22F
你看原po也說他沒寫還是過了啊 XD
09/13 23:02, 22F
文章代碼(AID): #1CX5LMsT (Ajax)
文章代碼(AID): #1CX5LMsT (Ajax)