鏇存柊:
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.
杩愯鎴睆:
鍏跺畠鐨勪竴浜涜祫鏂欏彲浠ュ弬鑰傿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