天天看点

jsp表单ajax提交中文,JSP 中 AJAX 的表单提交中文问题的简单解决方案 - GBK 版本(引用)...

鏇存柊:

2007-01-03

淇浜?AJAXFormer 涓浜屼釜鍙傛暟 resultDiv 澶勭悊涓嶅綋鐨勯棶棰?

澧炲姞浜嗕粠鏈嶅姟鍣ㄧ杩斿洖鑴氭湰骞跺姞浠ユ墽琛岀殑鍔熻兘;

澧炲姞浜嗚〃鍗曟彁浜ゅ悗缃戠粶鍑洪敊鐨勯敊璇樉绀哄姛鑳?

杩欎簺鏂板姛鑳介兘宸茬粡鏀惧湪绀轰緥椤甸潰涓簡.

娴嬭瘯閫氳繃: Resin 3.0.18, Tomcat 5.0.30, 5.5.20; 娴忚鍣? IE 6/Firefox 2.0.

涓婁竴绡囨枃绔?JSP 涓?AJAX 鐨勮〃鍗曟彁浜や腑鏂囬棶棰樼殑绠€鍗曡В鍐虫柟妗?涓昏鏄拡瀵?UTF-8 鐗堟湰鐨勮繘琛屽鐞嗙殑, 閴翠簬涓浗澶ч檰鍦板尯澶ч儴鍒嗚繕鏄敤 GBK 缂栫爜鍐?JSP, 鍥犳鏈枃灏遍拡瀵?GBK 鐨勫疄璺电粨鏋滆繘琛屼粙缁?

鏈夋湅鍙嬫彁鍒?褰揂JAX閬亣GBK鐨勫按灏?閲岃褰?AJAX 浣跨敤 GBK 缂栫爜鍚? 琛ㄥ崟鎻愪氦灏嗗嚭鐜颁贡鐮? 濡傚墠鏂囨墍杩? 鍙鍏ㄩ儴閲囩敤 UTF-8 缂栫爜, 鏄病鏈変换浣曢棶棰樼殑. 閭d箞閮界敤 GBK 鍛?

棣栧厛瑕佽鐨勬槸鎴戜滑鐨勬枃绔犺繕鏄竴鏍风殑鍘熷垯: 灏藉彲鑳藉皯鐨勬敼鍔ㄥ師鏉ョ殑浠g爜鏉ヨВ鍐充腑鏂囦贡鐮侀棶棰? 鎵€浠ユ湰鏂囩殑绀轰緥娌℃湁鐢ㄨ繃婊ゅ櫒绛夋柟娉?

閭d箞浣跨敤 GBK 缂栫爜鍒板簳鏈夋病鏈変贡鐮侀棶棰樺憿?

绗竴涓叧閿偣灏辨槸 AJAX 鐨勮〃鍗曟彁浜や唬鐮佸繀椤绘纭殑鎸夌収 HTTP 瑙勮寖瀹炵幇, 鍗宠淇濇寔鍘熸潵鐨?GET/POST 鏂瑰紡涓嶅彉, 涔熻淇濇寔閲岄潰鐨勫唴瀹瑰拰娴忚鍣ㄦ彁浜ょ殑鍐呭涓€鎽镐竴鏍? 浠ヤ笅鍐呭鎽樿嚜鎴戠紪鍐欑殑鍐呴儴鍩硅鏁欐潗:

----------------- 寮曠敤寮€濮?-----------------

棣栧厛蹇呴』瑕佷粙缁嶄竴涓?HTTP 鍗忚鍜?GET, POST 鐨勫伐浣滄柟寮?

褰撶敤鎴峰湪Web娴忚鍣ㄥ湴鍧€鏍忎腑杈撳叆涓€涓甫鏈塰ttp://鍓嶇紑鐨刄RL骞舵寜涓婨nter鍚?鎴栬€呭湪Web椤甸潰涓煇涓互http://寮€澶寸殑瓒呴摼鎺ヤ笂鍗曞嚮榧犳爣,HTTP浜嬪姟澶勭悊鐨勭涓€涓樁娈?-寤虹珛杩炴帴闃舵灏卞紑濮嬩簡.HTTP鐨勯粯璁ょ鍙f槸80.

闅忕潃杩炴帴鐨勫缓绔?HTTP灏辫繘鍏ヤ簡瀹㈡埛鍚戞湇鍔″櫒鍙戦€佽姹傜殑闃舵.瀹㈡埛鍚戞湇鍔″櫒鍙戦€佺殑璇锋眰鏄竴涓湁鐗瑰畾鏍煎紡鐨凙SCII娑堟伅,鍏惰娉曡鍒欎负:

6KB

< Method > < URL > < HTTP Version >

{ : }*

{ Entity Body }

璇锋眰娑堟伅鐨勯《绔槸璇锋眰琛?鐢ㄤ簬鎸囧畾鏂规硶,URL鍜孒TTP鍗忚鐨勭増鏈?璇锋眰琛岀殑鏈€鍚庢槸鍥炶溅鎹㈣.鏂规硶鏈塆ET,POST,HEAD,PUT,DELETE绛?

鍦ㄨ姹傝涔嬪悗鏄嫢骞蹭釜鎶ュご(Header)琛?姣忎釜鎶ュご琛岄兘鏄敱涓€涓姤澶村拰涓€涓彇鍊兼瀯鎴愮殑浜屽厓瀵?鎶ュご鍜屽彇鍊间箣闂翠互":"鍒嗛殧;鎶ュご琛岀殑鏈€鍚庢槸鍥炶溅鎹㈣. 甯歌鐨勬姤澶存湁Accept(鎸囧畾MIME濯掍綋绫诲瀷),Accept_Charset(鍝嶅簲娑堟伅鐨勭紪鐮佹柟寮?,Accept_Encoding(鍝嶅簲娑堟伅鐨勫瓧绗﹂泦),User_Agent(鐢ㄦ埛鐨勬祻瑙堝櫒淇℃伅)绛?

鍦ㄨ姹傛秷鎭殑鎶ュご琛屼箣鍚庢槸涓€涓洖杞︽崲琛?琛ㄦ槑璇锋眰娑堟伅鐨勬姤澶撮儴鍒嗙粨鏉?鍦ㄨ繖涓猏n涔嬪悗鏄姹傛秷鎭殑娑堟伅瀹炰綋(Entity Body).

Web鏈嶅姟鍣ㄥ湪鏀跺埌瀹㈡埛璇锋眰骞朵綔鍑哄鐞嗕箣鍚?瑕佸悜瀹㈡埛鍙戦€佸簲绛旀秷鎭?涓庤姹傛秷鎭竴鏍?搴旂瓟娑堟伅鐨勮娉曡鍒欎负:

< HTTP Version> []

{ : } *

{ Entity Body }

搴旂瓟娑堟伅鐨勭涓€琛屼负鐘舵€佽,鍏朵腑鍖呮嫭浜咹TTP鐗堟湰鍙?鐘舵€佺爜鍜屽鐘舵€佺爜杩涜绠€鐭В閲婄殑娑堟伅;鐘舵€佽鐨勬渶鍚庢槸鍥炶溅鎹㈣.鐘舵€佺爜鐢?浣嶆暟瀛楃粍鎴?鏈?绫?

1XX 淇濈暀

2XX 琛ㄧず鎴愬姛

3XX 琛ㄧずURL宸茬粡琚Щ璧?

4XX 琛ㄧず瀹㈡埛閿欒

5XX 琛ㄧず鏈嶅姟鍣ㄩ敊璇?

渚嬪:415,琛ㄧず涓嶆敮鎸佹敼濯掍綋绫诲瀷;503,琛ㄧず鏈嶅姟鍣ㄤ笉鑳借闂?鏈€甯歌鐨勬槸200,琛ㄧず鎴愬姛.甯歌鐨勬姤澶存湁:Last_Modified(鏈€鍚庝慨鏀规椂闂?,Content_Type(娑堟伅鍐呭鐨凪IME绫诲瀷),Content_Length(鍐呭闀垮害)绛?

鍦ㄦ姤澶磋涔嬪悗涔熸槸涓€涓洖杞︽崲琛?鐢ㄤ互琛ㄧず搴旂瓟娑堟伅鐨勬姤澶撮儴鍒嗙殑缁撴潫,浠ュ強搴旂瓟娑堟伅瀹炰綋鐨勫紑濮?

涓嬮潰鏄竴涓簲绛旀秷鎭殑渚嬪瓙:

HTTP/1.0 200 OK

Date: Moday,07-Apr-97 21:13:02 GMT

Server:NCSA/1.1

MIME_Version:1.0

Content_Type:text/html

Last_Modified:Thu Dec 5 09:28:01 1996

Coentent_Length:3107

...

閭d箞 GET 鍜?POST 鏈変粈涔堝尯鍒? 鍖哄埆灏辨槸涓€涓湪 URL 璇锋眰閲岄潰闄勫甫浜嗚〃鍗曞弬鏁板拰鍊? 涓€涓槸鍦?HTTP 璇锋眰鐨勬秷鎭疄浣撲腑. 鐢ㄤ笅闈㈢殑渚嬪瓙鍙互寰堝鏄撶殑鐪嬪埌鍚屾牱鐨勬暟鎹€氳繃GET鍜孭OST鏉ュ彂閫佺殑鍖哄埆, 鍙戦€佺殑鏁版嵁鏄?username=寮犱笁 :

GET 鏂瑰紡, 娴忚鍣ㄩ敭鍏?http://localhost?username=寮犱笁

GET /?username=%E5%BC%A0%E4%B8%89 HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, **

Accept-Language: zh-cn

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

Host: localhost

Content-Length: 28

Connection: Keep-Alive

username=%E5%BC%A0%E4%B8%89

姣旇緝涓€涓嬩笂闈㈢殑涓ゆ鏂囧瓧, 鎮ㄤ細鍙戠幇 GET 鏂瑰紡鎶婅〃鍗曞唴瀹规斁鍦ㄥ墠闈㈢殑璇锋眰澶翠腑, 鑰?POST 鍒欐妸杩欎簺鍐呭鏀惧湪璇锋眰鐨勪富浣撲腑浜? 鍚屾椂 POST 涓妸璇锋眰鐨?Content-Type 澶磋缃负 application/x-www-form-urlencoded. 鑰屽彂閫佺殑姝f枃閮芥槸涓€鏍风殑, 鍙互杩欐牱鏉ユ瀯閫犱竴涓〃鍗曟彁浜ゆ鏂?

encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&.....

娉? encodeURIComponent 杩斿洖涓€涓寘鍚簡 charstring 鍐呭鐨勬柊鐨?String 瀵硅薄(Unicode 鏍煎紡)锛?鎵€鏈夌┖鏍笺€佹爣鐐广€侀噸闊崇鍙蜂互鍙婂叾浠栭潪 ASCII 瀛楃閮界敤 %xx 缂栫爜浠f浛锛屽叾涓?xx 绛変簬琛ㄧず璇ュ瓧绗︾殑鍗佸叚杩涘埗鏁般€?渚嬪锛岀┖鏍艰繑鍥炵殑鏄?"%20" 銆?瀛楃鐨勫€煎ぇ浜?255 鐨勭敤 %uxxxx 鏍煎紡瀛樺偍銆傚弬瑙?JavaScript 鐨?encodeURIComponent() 鏂规硶.

涓嬮潰灏辫璁轰竴涓嬪浣曞湪 JavaScript 涓墽琛屼竴涓?GET 鎴栬€?POST 璇锋眰. 濡傛灉鎮ㄧ敤杩?Java, 閭d箞鎮ㄥ彲鑳界啛鎮変笅鍒楃殑鐢?java.net.URLConnection 绫昏繘琛?POST 鎿嶄綔鐨勪唬鐮?鍙傝€?Java Tip 34: POSTing via Java ):

URL url;

URLConnection urlConn;

DataOutputStream printout;

// URL of CGI-Bin or jsp, asp script.

url = new URL ("somepage");

// URL connection channel.

urlConn = url.openConnection();

// ......

// No caching, we want the real thing.

urlConn.setUseCaches (false);

// Specify the content type.

urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// Send POST output.

printout = new DataOutputStream (urlConn.getOutputStream ());

String content = "name=" + URLEncoder.encode ("Buford Early") + "&email=" + URLEncoder.encode ("[email聽protected]");

printout.writeBytes (content);

printout.flush ();

printout.close ();

浠ヤ笂鐨勪唬鐮佸悜 somepage 鍙戦€佷簡涓€娆?POST 璇锋眰, 鏁版嵁涓?name = Buford Early, email = [email聽protected].

鐢↗avaScript 鏉ユ墽琛?POST/GET 璇锋眰鏄悓鏍风殑鍘熺悊, 涓嬮潰鐨勪唬鐮佸睍绀轰簡鍒嗗埆鐢?XMLHttpRequest 瀵硅薄鍚?somepage 鐢?GET 鍜?POST 涓ょ鏂瑰紡鍙戦€佸拰涓婁緥鐩稿悓鐨勬暟鎹殑鍏蜂綋杩囩▼:

GET 鏂瑰紡

var postContent =

"name=" + encodeURIComponent("Buford Early") + "&email=" + encodeURIComponent("[email聽protected]");

xmlhttp.open("GET", "somepage" + "?" + postContent, true);

xmlhttp.send(null);

POST 鏂瑰紡

var postContent =

"name=" + encodeURIComponent("Buford Early") + "&email=" + encodeURIComponent("[email聽protected]");

xmlhttp.open("POST", "somepage", true);

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xmlhttp.send(postContent);

鑷虫甯屾湜浣犲凡缁忚兘澶熺悊瑙e浣曠敤 JavaScript 涓殑 XMLHttpRequest 瀵硅薄鏉ユ墽琛?GET/POST 鎿嶄綔, 鍓╀笅鐨勫伐浣滃氨鏄偍濡備綍鏉ユ瀯閫犺繖浜涙彁浜ょ殑鍙傛暟浜? 鏈€鍚庢垜缁欏嚭涓€涓皢鐜版湁鐨?form 鎻愪氦浠g爜淇敼涓哄紓姝ョ殑 AJAX 鎻愪氦鐨勪唬鐮?娉ㄦ剰鐩墠浣滆€呰繕涓嶇煡閬撳浣曡 file 涓婁紶琛ㄥ崟鍩熶篃鑳藉紓姝ヤ笂浼犳枃浠?. 棣栧厛璇风湅涓や釜 JavaScript 鍑芥暟:

// form - the form to submit

// resultDivId - the division of which to display result text in, in null, then

// create an element and add it to the end of the body

function ajaxSubmitForm(form, resultDivId) {

var elements = form.elements;// Enumeration the form elements

var element;

var i;

var postContent = "";// Form contents need to submit

for(i=0;i

var element=elements[i];

if(element.type=="text" || element.type=="textarea" || element.type=="hidden") {

postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";

}

else if(element.type=="select-one"||element.type=="select-multiple") {

var options=element.options,j,item;

for(j=0;j

item=options[j];

if(item.selected) {

postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(item.value) + "&";

}

}

} else if(element.type=="checkbox"||element.type=="radio") {

if(element.checked) {

postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";

}

} else if(element.type=="file") {

if(element.value != "") {

postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";

}

} else {

postContent += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";

}

}

alert(postContent);

ajaxSubmit(form.action, form.method, postContent);

}

// url - the url to do submit

// method - "get" or "post"

// postContent - the string with values to be submited

// resultDivId - the division of which to display result text in, in null, then

// create an element and add it to the end of the body

function ajaxSubmit(url, method, postContent, resultDivId)

{

var loadingDiv = document.getElementById('loading');

// call in new thread to allow ui to update

window.setTimeout(function () {

loadingDiv.innerText = "Loading....";

loadingDiv.style.display = "";

}, 1);

// code for Mozilla, etc.

if (window.XMLHttpRequest)

{

xmlhttp=new XMLHttpRequest();

}

// code for IE

else if (window.ActiveXObject)

{

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

if(xmlhttp) {

xmlhttp.onreadystatechange = function() {

// if xmlhttp shows "loaded"

if (xmlhttp.readyState==4)

{

if(resultDivId) {

document.getElementByID(resultDivId).innerHTML = xmlhttp.responseText;

} else {

var result = document.createElement("DIV");

result.style.;

result.innerHTML = xmlhttp.responseText;

document.body.appendChild(result);

}

loadingDiv.innerHTML =

"Submit finnished!";

}

};

if(method.toLowerCase() == "get") {

xmlhttp.open("GET", url + "?" + postContent, true);

xmlhttp.send(null);

} else if(method.toLowerCase() == "post") {

xmlhttp.open("POST", url, true);

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xmlhttp.send(postContent);

}

} else {

loadingDiv.innerHTML =

"Can't create XMLHttpRequest object, please check your web browser.";

}

}

鍑芥暟 ajaxSubmitForm 灏嗚〃鍗曡鎻愪氦鐨勫唴瀹硅繘琛屽皝瑁? 鐒跺悗璋冪敤 ajaxSubmit 鍑芥暟鏉ユ墽琛岀湡姝g殑寮傛鎻愪氦, 琛ㄥ崟鎻愪氦鍚庢墍杩斿洖鐨勭粨鏋滃垯鏄剧ず鍦ㄧ粰瀹氱殑 DIV 瀹瑰櫒涓垨鑰呮病鏈夋寚瀹氬弬鏁版椂鐢?DOM 瀵硅薄鍔ㄦ€佺敓鎴愪竴涓?DIV 瀹瑰櫒鏉ユ樉绀虹粨鏋滃苟娣诲姞鍒伴〉闈㈡湯灏? 杩欐牱, 瀵瑰師鏉ョ殑琛ㄥ崟鍙渶瑕佹敼鍔ㄤ竴涓湴鏂瑰氨鍙互灏嗗師鏉ョ殑琛ㄥ崟鎻愪氦鏀逛负寮傛妯″紡, 鍗冲湪 form 鏍囩閲屽姞鍏? onSubmit="ajaxSubmitForm(this);return false;" 鍗冲彲, return false 纭繚琛ㄥ崟涓嶄細琚祻瑙堝櫒鍚屾鎻愪氦. 瀹屾暣鐨勪緥瀛愯鐪嬭繖閲?

----------------- 寮曠敤缁撴潫 -----------------

OK, 甯屾湜鑷虫涓烘鎮ㄥ凡缁忕悊瑙d簡濡備綍鐢?AJAX 鏉ユ纭殑鎵ц GET/POST. 濡傛灉杩欎釜闂鎮ㄨВ鍐充簡, 鍙槸璇村悗鍙扮殑涔辩爜闂灏卞拰浣犵洿鎺ラ€氳繃琛ㄥ崟鎻愪氦鍑犱箮娌℃湁鍖哄埆浜? 杩欎釜鏂规硶鐨勫叿浣撳皝瑁呭凡缁忓湪闄勪欢鐨?ajax_common.js 涓簡.

鑷虫涔熻璐村嚭鏉ユ垜浠殑 GBK 缂栫爜鐨勫鎴风椤甸潰鐨勫唴瀹逛簡:

AJAX Form Submit Test

鏈〉闈㈢殑缂栫爜鏄腑鏂?

<meta http-equiv="Content-Type" content="text/html; charset=gbk">

娴嬭瘯杩囩殑鏈嶅姟鍣?

Resin 3.0.18

Tomcat 5.5.20

Tomcat 5.0.30

AJAX Form Submit Test

Fill the form and then click submit

鎻愪氦鏂瑰紡: POST

action="form_action.jsp"

onSubmit="former.ajaxSubmitForm();return false;">

text:

checkbox:

radio:

select:

D1

鎻愪氦鏂瑰紡: GET

action="form_action.jsp"

onSubmit="former2.ajaxSubmitForm();return false;">

text:

checkbox:

radio:

select:

D1

Form 1 鐨勬彁浜ょ粨鏋滃皢浼氭樉绀哄湪杩欓噷.

var former = new AjaxFormer($('form1'), 'resultDiv');

var former2 = new AjaxFormer($('form2'));

鍙互鐪嬪埌鎴戜滑鐨勭‘浣跨敤鐨勬槸 GBK 缂栫爜, 娴忚鍣ㄦ墦寮€鐨勬椂鍊欒嚜鍔ㄩ€夋嫨鐨勭紪鐮佷篃鏄畝浣撲腑鏂?

閭d箞绗簩涓叧閿偣灏辨槸鏈嶅姟鍣ㄧ鐨勮〃鍗曟暟鎹鍙栦簡.杩欎釜闂璺熷叿浣撶殑鏈嶅姟鍣ㄦ湁寰堝ぇ鍏崇郴. 瀵逛簬 Resin 鏈嶅姟鍣ㄦ潵璇? 闂寰堝皯, 鍩烘湰涓婁笉璁烘槸 POST 鍜?GET, 鍑轰贡鐮佺殑姒傜巼閮芥瘮杈冨皬. 浣嗘槸 Tomcat 灏变笉鏁㈡伃缁翠簡, 杩欏ぇ姒備篃鏄紑婧愪骇鍝佸拰鍟嗕笟浜у搧鐨勫尯鍒? 缂轰箯鍓嶅悗涓€鑷存€у拰鍏煎鎬? 鍥犱负寮€婧愮殑涓嶉渶瑕佹彁渚涙妧鏈敮鎸? Tomcat 鐨?GET/POST 鐨勭紪鐮佸鐞嗘柟寮忎笉鍚岀殑鐗堟湰閮戒笉涓€鏍? 灏卞儚 Eclipse/Netbeans 鏂扮増鏈粠鏉ヤ笉闇€瑕佸吋瀹硅€佺増鏈殑鎻掍欢 API 涓€鏍? Hibernate/Struts/Spring 涔熸槸涓€鏍? 鎵€浠ュ Java 鐨勫緢绱? 褰撶劧, 杩欏氨鏄厤璐?寮€婧愮殑浠d环. 璺戦浜? 鍥犳鎴戜滑鐨勬湇鍔″櫒绔唬鐮佸ぇ閮ㄥ垎閮芥槸瀵?Tomcat 鐨勪贡鐮侀棶棰樼殑瑙e喅(POST鐨勬病鏈夐棶棰? 涓昏鏄?GET 鏂规硶鐨?.

//Send some headers to keep the user's browser from caching the response.

response.addHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT" );

response.addHeader("Last-Modified", new java.util.Date().toGMTString());

response.addHeader("Cache-Control", "no-cache, must-revalidate" );

response.addHeader("Pragma", "no-cache" );

// This will emulate a network delay, for 2 sec.

//Thread.currentThread().sleep(2000);

request.setCharacterEncoding("utf-8");

%>

public static String changeEncoding(String input, String sourceEncoding,

String targetEncoding) {

if (input == null || input.equals("")) {

return input;

}

try {

byte[] bytes = input.getBytes(sourceEncoding);

return new String(bytes, targetEncoding);

} catch (Exception ex) {

}

return input;

}

public static String escape(String src) {

int i;

char j;

StringBuffer tmp = new StringBuffer();

tmp.ensureCapacity(src.length() * 6);

for (i = 0; i < src.length(); i++) {

j = src.charAt(i);

if (Character.isDigit(j) || Character.isLowerCase(j)

|| Character.isUpperCase(j))

tmp.append(j);

else if (j < 256) {

tmp.append("%");

if (j < 16)

tmp.append("0");

tmp.append(Integer.toString(j, 16));

} else {

tmp.append("%u");

tmp.append(Integer.toString(j, 16));

}

}

return tmp.toString();

}

%>

Test form action page

杩欐槸 GBK 缂栫爜鐗堟湰鐨勫悗鍙拌〃鍗曟彁浜ら〉闈?

boolean isTomcat = application.getServerInfo().toLowerCase().indexOf("tomcat") != -1;

%>

Form submit method:

The form content u send is:

java.util.Enumeration e = request.getParameterNames();

while (e.hasMoreElements()) {

String name = (String)e.nextElement();

String value = request.getParameter(name);

if(isTomcat && request.getMethod().equalsIgnoreCase("GET")) {

name = changeEncoding(name, "ISO8859-1", "UTF-8");

value = changeEncoding(value, "ISO8859-1", "UTF-8");

}

out.println("

" + name + "

= " + value + "

");

}

// 缁欏墠鍙拌繑鍥炰竴涓彲浠ユ墽琛岀殑鑴氭湰

//response.addHeader("response_script", changeEncoding("alert('鎻愪氦瀹屾垚');", "ISO8859-1", "UTF-8"));

response.addHeader("response_script", escape("alert('鎻愪氦瀹屾垚');"));

%>

booleanisTomcat=application.getServerInfo().toLowerCase().indexOf("tomcat") !=-1; 杩欎竴鍙ヤ富瑕侀拡瀵?Tomcat 杩涜澶勭悊, 濡傛灉鏄?GET 鏂规硶鐨勮瘽, 灏遍渶瑕佸皢琛ㄥ崟鍙傛暟浠?ISO8859-1 杞崲鍒?UTF-8 (娉ㄦ剰涓嶆槸 GBK, 璨屼技 Tomcat 寰堝枩娆?UTF-8?). 鍏跺畠鐨勫湴鏂瑰拰鍘熸潵鐨?UTF-8 鐗堟湰鐨勬病鏈夊尯鍒? 褰撶劧濡傛灉鎮ㄧ殑绔欑偣搴旇鐢ㄨ繃婊ゅ櫒鏉ユ洿鏂逛究鐨勮В鍐宠繖涓棶棰?

灏忕粨:

1. 浣跨敤涓€鑷寸殑瀛楃闆嗗緢閲嶈, 瑕佷箞鍏ㄦ槸 GBK, 瑕佷箞鍏ㄦ槸 UTF-8, 濡傛灉鏈夋潯浠? 灏卞叏閮ㄧ敤 UTF-8, 閭f牱宸ヤ綔閲忔槸鏈€灏忕殑;

2. 鐢?AJAX 鎻愪氦鐨勬椂鍊欎竴瀹氳鎸夌収 HTTP 鐨勮鑼冩潵, 鍋氬埌鍜屾祻瑙堝櫒灏介噺鍏煎, 灏ゅ叾鏄?POST 鐨勬椂鍊欎笉瑕佸啀寰€ URL 鍦板潃閲屽姞鍙傛暟浜? 浣犻偅鏍锋槸杩濊! 鍚庢灉灏辨槸鏈夌殑鏈嶅姟鍣ㄤ細涓嶆惌鐞嗕綘浼犻€掔殑杩欎簺鍙傛暟! 杩樻槸濡傛垜鎵€璁? 鍙傛暟鎻愪氦涔嬪墠瑕佺敤 encodeURIComponent() 鏉ヨ浆鍖? 杩欎篃鏄负浜嗙鍚堟祻瑙堝櫒鐨勪範鎯仛娉?

3. 鍚庡彴濡傛灉璇诲彇鍙傛暟鏈変贡鐮? 灏卞敖閲忓鍦?ISO8859-1, GBK, UTF-8 涓棿澶氳浆鎹㈠嚑娆¤瘯璇? 鍙互璇曡瘯鍋跺啓鐨勯偅涓?changeEncoding() 鏂规硶, 鎶婂嚑涓浆鎹㈠悗鐨勮〃鍗曞€奸兘鍒楀嚭鏉? 涓€瀹氭湁涓€涓槸姝g‘鐨? 鎬绘槸鍙互瑙e喅闂鐨? 杩欎釜鏈潵涓嶅簲璇ユ槸鍋朵滑鐨勪换鍔? 浣嗘槸鍐欐湇鍔″櫒鐨勪汉鏄€佺編, 灏ゅ叾鏄?Tomcat 浣滆€? 鍙啛鎮?ISO8859-1.

4. 閴翠簬 TOMCAT 璇诲彇 POST 鍙傛暟鐨勬椂鍊欏緢灏戝嚭闂, 鍥犳寤鸿AJAX鎻愪氦琛ㄥ崟鐨勬椂鍊欏鐢?POST 鏂规硶, 灏介噺涓嶇敤 GET.

杩愯鎴睆:

jsp表单ajax提交中文,JSP 中 AJAX 的表单提交中文问题的简单解决方案 - GBK 版本(引用)...

鍏跺畠鐨勪竴浜涜祫鏂欏彲浠ュ弬鑰傿logjava涓婄殑涓€绡囧師鍒涙枃绔? [鍘熷垱]struts,ajax涔辩爜瑙e喅鏂规

娆㈣繋鍙戣〃寤鸿鍜屾洿濂界殑瑙傜偣. 璋㈣阿! 閲嶇敵鏈枃鏃犳剰浠f浛鎮ㄧ殑 AJAX 妗嗘灦, 涓嶈繃鍦ㄤ綘鎶撶媯鐨勬椂鍊欏彲浠ヨ€冭檻鐪嬬湅浠栦滑琛ㄥ崟鎻愪氦鐨勪唬鐮? 鏀规敼瀹?

鏈汉缈昏瘧鐨?XMLHttpRequest 瀵硅薄浠嬬粛:

The XMLHttpRequest Object Reference XMLHttpRequest 瀵硅薄鍙傝€?

Methods 鏂规硶

Method 鏂规硶

Description 鎻忚堪

abort()

Cancels the current request

鍙栨秷褰撳墠璇锋眰

getAllResponseHeaders()

Returns the complete set of http headers as a string

灏嗗畬鏁寸殑 HTTP 澶撮儴鍋氫负涓€涓瓧绗︿覆杩斿洖

getResponseHeader("headername")

Returns the value of the specified http header

杩斿洖缁欏畾鐨?HTTP 澶寸殑鍊?

open("method","URL",async,"uname","pswd")

Specifies the method, URL, and other optional attributes of a request

The method parameter can have a value of "GET", "POST", or "PUT" (use "GET" when requesting data and use "POST" when sending data (especially if the length of the data is greater than 512 bytes.

The URL parameter may be either a relative or complete URL.

The async parameter specifies whether the request should be handled asynchronously or not. true means that script processing carries on after the send() method, without waiting for a response. false means that the script waits for a response before continuing script processing

鎸囧畾琛ㄥ崟鎻愪氦鏂规硶, URL, 浠ュ強璇锋眰鐨勫彲閫夊睘鎬?

method 鍙傛暟鍙互鏄?GET", "POST" 鎴栬€?"PUT" 杩欎簺鍊间腑涔嬩竴(浣跨敤"GET"鏉ヨ姹傛暟鎹? 鐗瑰埆鐨? 褰撳彂閫佺殑鏁版嵁闀垮害澶т簬512瀛楄妭鏃朵娇鐢?"POST").

URL 鍙傛暟鍙互涓虹浉瀵圭殑鍜屽畬鏁寸殑 URL.

async 鍙傛暟鎸囧畾璇锋眰鏄惁涓哄紓姝ユ柟寮忓鐞? true 鎰忓懗鐫€璋冪敤 send() 鏂规硶鍚庤剼鏈户缁悜涓嬫墽琛? 涓嶉渶瑕佺瓑寰呭搷搴? false 鎰忓懗鐫€鑴氭湰灏嗙瓑寰呭搷搴斾箣鍚庢墠鑳界户缁墽琛?

send(content)

Sends the request

鍙戦€佽姹?

setRequestHeader("label","value")

Adds a label/value pair to the http header to be sent

鍦ㄨ鍙戦€佺殑 HTTP 澶翠腑娣诲姞 鏍囩/鍙栧€?

Properties 灞炴€?

Property 灞炴€?

Description 鎻忚堪

onreadystatechange

An event handler for an event that fires at every state change

姣忔鐘舵€佹敼鍙樻椂闄ら潪鐨勪簨浠跺鐞嗗櫒

readyState

Returns the state of the object:

0 = uninitialized

1 = loading

2 = loaded

3 = interactive

4 = complete

杩斿洖瀵硅薄鐨勭姸鎬?

0 = 鏈垵濮嬪寲

1 = 杞藉叆涓?

2 = 宸茶浇鍏?

3 = 浜や簰

4 = 瀹屾垚

responseText

Returns the response as a string

灏嗗搷搴斿仛涓哄瓧绗︿覆杩斿洖

responseXML

Returns the response as XML. This property returns an XML document object, which can be examined and parsed using W3C DOM node tree methods and properties

灏嗗搷搴斿仛涓篨ML杩斿洖. 杩欎釜灞炴€ц繑鍥炰竴涓?XML 鏂囨。瀵硅薄, 鍙互鐢?W3C 鐨?DOM 鑺傜偣鏍戞柟娉曞拰灞炴€ц繘琛屾绱㈠垎鏋?

status

Returns the status as a number (e.g. 404 for "Not Found" or 200 for "OK")

灏嗙姸鎬佸仛涓烘暟瀛楄繑鍥?渚嬪 404 涓?Not Found" 鎴栬€?200 涓?"OK")

statusText

Returns the status as a string (e.g. "Not Found" or "OK")

灏嗙姸鎬佸仛涓哄瓧绗︿覆杩斿洖(渚嬪 "Not Found" 鎴栬€?"OK")

posted on 2006-12-31 14:37 BeanSoft 闃呰(2650) 璇勮(6) 聽缂栬緫聽鏀惰棌 寮曠敤 鎵€灞炲垎绫? Web

posted on 2007-07-25 15:01 Tom 闃呰(1074) 璇勮(0) 聽缂栬緫 聽鏀惰棌 鎵€灞炲垎绫? JavaScript