JavaScript語(yǔ)言精粹 字符串(example:js變量作為URL參數(shù)亂碼)
Posted on 2010-06-27 19:17 幻海藍(lán)夢(mèng) 閱讀(1452) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): JS
http://pouyang.javaeye.com/blog/575245?
字符串可以被包含在單引號(hào)或雙引號(hào)中,它可能包含0個(gè)或多個(gè)字符\(反斜線符號(hào))是轉(zhuǎn)義字符
? JavaScript在被創(chuàng)建的時(shí)候,Unicode是一個(gè)16位的字符集,所以JavaScript中的所有字符都是16位的.
? JavaScript沒(méi)有字符類(lèi)型,要表示一個(gè)字符,只須創(chuàng)建僅包含一個(gè)字符的字符串即可
字符串是不可變的,一旦字符串被創(chuàng)建,就永遠(yuǎn)無(wú)法改變它,跟java一樣,所以語(yǔ)言都是相通的
現(xiàn)在流行的異步提交,豐富多彩的互聯(lián)網(wǎng),現(xiàn)在不僅程序員享受著這種異步交互帶來(lái)的成就感,客戶(hù)也很期待也很享受Ajax的強(qiáng)大的交互功能,異步提交難免會(huì)出現(xiàn)js變量(中文)作為URL參數(shù),js變量作為URL參數(shù)傳到后臺(tái)會(huì)出現(xiàn)中文亂碼情況,(Jquery form動(dòng)態(tài)提交不會(huì)出現(xiàn)亂碼問(wèn)題),異步請(qǐng)求過(guò)去會(huì)得到,以下是解決方法
//后臺(tái) 控制層
------------------------
? 有了兩個(gè)關(guān)鍵所在,就可以處理中文亂碼問(wèn)題了.但是很多地方都要處理,所以也要重構(gòu)下
? 這也帶來(lái)了問(wèn)題,如果URL后面的參數(shù)過(guò)多那么會(huì)導(dǎo)致URL非常長(zhǎng),曾經(jīng)考慮過(guò)把所有參數(shù)封裝成一個(gè)變量傳遞過(guò)去,這種方法可行是可行,但是解決不了中文亂碼的問(wèn)題,以下附上這種方法.
o 或者 parameter 傳遞過(guò)去,這種格式的在后臺(tái)這樣處理:
字符串可以被包含在單引號(hào)或雙引號(hào)中,它可能包含0個(gè)或多個(gè)字符\(反斜線符號(hào))是轉(zhuǎn)義字符
? JavaScript在被創(chuàng)建的時(shí)候,Unicode是一個(gè)16位的字符集,所以JavaScript中的所有字符都是16位的.
? JavaScript沒(méi)有字符類(lèi)型,要表示一個(gè)字符,只須創(chuàng)建僅包含一個(gè)字符的字符串即可
- alert( "A" ?==? "\u0041" ); //true ??
- alert( "seven" .length);? //?5 ??
- "o" + "y" + "p" ?==? "oyp" ; //true; ??
- "oyp" .toUpperCase()?==? 'CAT' ;??
alert("A" == "\u0041");//true alert("seven".length); // 5 "o"+"y"+"p" == "oyp";//true; "oyp".toUpperCase() == 'CAT';
字符串是不可變的,一旦字符串被創(chuàng)建,就永遠(yuǎn)無(wú)法改變它,跟java一樣,所以語(yǔ)言都是相通的
現(xiàn)在流行的異步提交,豐富多彩的互聯(lián)網(wǎng),現(xiàn)在不僅程序員享受著這種異步交互帶來(lái)的成就感,客戶(hù)也很期待也很享受Ajax的強(qiáng)大的交互功能,異步提交難免會(huì)出現(xiàn)js變量(中文)作為URL參數(shù),js變量作為URL參數(shù)傳到后臺(tái)會(huì)出現(xiàn)中文亂碼情況,(Jquery form動(dòng)態(tài)提交不會(huì)出現(xiàn)亂碼問(wèn)題),異步請(qǐng)求過(guò)去會(huì)得到,以下是解決方法
- //前臺(tái) ??
- var ?accountCN?= "中文" ; ??
- var ?account?=?encodeURI(encodeURI(accountCN)); //?關(guān)鍵所在 ??
- var ?updateURL?=? "http://localhost:7001/ouyangping/demo.do?account=" account ??
- function ?updateRow(updateURL)?{ ??
- ????$.ajax(?{ ??
- ????????type?:? "POST" , ??
- ????????url?:updateURL, ??
- ????????cache?:? false , ??
- ????????dataType:? "json" , ??
- ????????success?:? function ?updateSuceess(data)?{ ??
- ???????? ??
- ???????????? ??
- ???????????? if ?(data.state?==? '1' )?{ ??
- ????????????????alert( '修改成功!' ); ??
- ????????????}? else ?{???? ??
- ????????????????alert( '修改失敗!' ); ??
- ????????????} ??
- ????????} ??
- ????}); ??
- }??
//前臺(tái) var accountCN ="中文"; var account = encodeURI(encodeURI(accountCN));// 關(guān)鍵所在 var updateURL = "http://localhost:7001/ouyangping/demo.do?account="account function updateRow(updateURL) { $.ajax( { type : "POST", url :updateURL, cache : false, dataType: "json", success : function updateSuceess(data) { if (data.state == '1') { alert('修改成功!'); } else { alert('修改失敗!'); } } }); }
//后臺(tái) 控制層
- String??account?=?java.net.URLDecoder.decode(iRequest.getParameter("account"),"utf-8");//關(guān)鍵所在 ??
- JSONObject?json?=?new?JSONObject(); ??
- json.clear(); ??
- iResponse.setHeader("X-JSON",?json.toString()); ??
- iResponse.setCharacterEncoding("UTF-8"); ??
- iResponse.setHeader("Cache-Control",?"no-cache,must-revalidate");//?清楚緩存 ??
- iResponse.setHeader("Pragma",?"no-cache");?//?HTTP?1.0 ??
- iResponse.setDateHeader("Expires",?0);?//?prevents?caching?at?the ??
- //更新是否成功 ??
- //int?state?=?userManagerService.modUserByYui(userManagerDTO); ??
- int?state?=?userManagerService.modUserByYui(userManagerDTOJS); ??
- json.put("state",state); ??
- try?{ ??
- ????iResponse.getWriter().print(json.toString()); ??
- }?catch?(IOException?e)?{ ??
- ????e.printStackTrace(); ??
- } ??
- return?null;??
String account = java.net.URLDecoder.decode(iRequest.getParameter("account"),"utf-8");//關(guān)鍵所在 JSONObject json = new JSONObject(); json.clear(); iResponse.setHeader("X-JSON", json.toString()); iResponse.setCharacterEncoding("UTF-8"); iResponse.setHeader("Cache-Control", "no-cache,must-revalidate");// 清楚緩存 iResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0 iResponse.setDateHeader("Expires", 0); // prevents caching at the //更新是否成功 //int state = userManagerService.modUserByYui(userManagerDTO); int state = userManagerService.modUserByYui(userManagerDTOJS); json.put("state",state); try { iResponse.getWriter().print(json.toString()); } catch (IOException e) { e.printStackTrace(); } return null;
------------------------
? 有了兩個(gè)關(guān)鍵所在,就可以處理中文亂碼問(wèn)題了.但是很多地方都要處理,所以也要重構(gòu)下
? 這也帶來(lái)了問(wèn)題,如果URL后面的參數(shù)過(guò)多那么會(huì)導(dǎo)致URL非常長(zhǎng),曾經(jīng)考慮過(guò)把所有參數(shù)封裝成一個(gè)變量傳遞過(guò)去,這種方法可行是可行,但是解決不了中文亂碼的問(wèn)題,以下附上這種方法.
- //這種把對(duì)象o傳遞過(guò)去,o里的內(nèi)容是json格式。 ??
- Object?o?=?new?Object() ??
- o.user?=?document.getElementById("user"); ??
- o.password?=?document.getElementById("password");??
//這種把對(duì)象o傳遞過(guò)去,o里的內(nèi)容是json格式。 Object o = new Object() o.user = document.getElementById("user"); o.password = document.getElementById("password");
- //以Json格式獲取頁(yè)面上的查詢(xún)條件,且這些參數(shù)的name要一致 ??
- function?getJsonParameters(page)?{ ??
- ????$('input:text').each(function(){? ??
- ????????this.value?=?jQuery.trim(this.value); ??
- ????????} ??
- ????);? ??
- ????var?parameters?=?document.getElementsByName('form1'); ??
- ????var?parameter?=?"{"; ??
- ????for?(var?i?=?0?;?i?<?parameters.length;?i++?)?{ ??
- ????????if?(parameters[i].value?!=?null?&&?parameters[i].value?!=?'')?{ ??
- ????????????parameter?+=?parameters[i].id?+":'"+parameters[i].value+"',"; ??
- ????????} ??
- ????} ??
- ????if?(''+page?!=?'undefined'){ ??
- ????????parameter?+='page'+":'"+page+"',"; ??
- ????} ??
- ????parameter?+=?"}"; ??
- ????return?parameter; ??
- }??
//以Json格式獲取頁(yè)面上的查詢(xún)條件,且這些參數(shù)的name要一致 function getJsonParameters(page) { $('input:text').each(function(){ this.value = jQuery.trim(this.value); } ); var parameters = document.getElementsByName('form1'); var parameter = "{"; for (var i = 0 ; i < parameters.length; i++ ) { if (parameters[i].value != null && parameters[i].value != '') { parameter += parameters[i].id +":'"+parameters[i].value+"',"; } } if (''+page != 'undefined'){ parameter +='page'+":'"+page+"',"; } parameter += "}"; return parameter; }
o 或者 parameter 傳遞過(guò)去,這種格式的在后臺(tái)這樣處理:
- ???? ??
- //?頁(yè)面參數(shù)轉(zhuǎn)化為Bean ??
- String?parameter?=?iRequest.getParameter("parameter"); ??
- ????????????JSONObject?jsonObject?=?JSONObject.fromObject(parameter); ??
- ????????????UserManagerDTO?user?=?(UserManagerDTO)?JSONObject.toBean( ??
- ????????????????????jsonObject,?UserManagerDTO.class);??