锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍘熸枃鍦板潃:
http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
涓枃鍦板潃:
http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html
鍏抽敭璇嶏細 DWR AJAX
姒傝堪
榪欑瘒鏂囩珷闃愯堪浜嗕嬌鐢ㄥ紑婧愰」鐩瓺WR(鐩存帴Web榪滅▼鎺у埗)鍜孉JAX(寮傛JavaScript鍜孹ML)鐨勬蹇墊潵鎻愰珮Web搴旂敤鐨勫彲鐢ㄦс備綔鑰呬竴姝ユ鏉ュ睍紺篋WR濡備綍浣垮緱AJAX鐨勫簲鐢ㄦ棦綆鍗曞張蹇嵎銆傦紙1600瀛?2005騫?鏈?0鏃ワ級
AJAX錛屾垨鑰呰鏄紓姝avaScript鍜孹ML錛屾弿榪頒簡涓縐嶄嬌鐢ㄦ販鍚堜簡HTML(鎴朮HTML)鍜屽眰鍙犳牱寮忚〃浣滀負琛ㄨ揪淇℃伅,鏉ュ垱寤轟氦浜掑紡鐨刉eb搴旂敤鐨勫紑鍙戞妧鏈?鏂囨。瀵硅薄妯″瀷錛圖OM錛夛紝JavaScript,鍔ㄦ佸湴鏄劇ず鍜屼笌琛ㄨ揪淇℃伅榪涜浜や簰;騫朵笖錛孹MLHttpRequest瀵硅薄涓嶹eb鏈嶅姟鍣ㄥ紓姝ュ湴浜ゆ崲鍜屽鐞嗘暟鎹?br />
鍥犵壒緗戜笂璁稿渚嬪瓙灞曠ず浜嗗湪涓涓狧TML鏂囦歡鍐呴儴浣跨敤XMLHttpRequest涓庢湇鍔″櫒绔繘琛屼氦浜掔殑蹇呰鐨勬楠ゃ傚綋鎵嬪伐鍦扮紪鍐欏拰緇存姢XMLHttpRequest浠g爜鏃訛紝寮鍙戣呭繀欏誨鐞嗚澶氭綔鍦ㄧ殑闂錛岀壒鍒槸綾諱技浜庤法嫻忚鍣ㄧ殑DOM瀹炵幇鐨勫吋瀹規(guī)ц繖鏍風殑闂銆傝繖灝嗕細瀵艱嚧鍦ㄧ紪鐮佸拰璋冭瘯Javascript浠g爜涓婇潰鑺辮垂鏁頒笉娓呯殑鏃墮棿錛岃繖鏄劇劧瀵瑰紑鍙戣呮潵璇村緢涓嶅弸濂姐?br />
DWR(鐩存帴Web榪滅▼鎺у埗)欏圭洰鏄湪Apache璁稿彲涓嬬殑涓涓紑婧愮殑瑙e喅鏂規(guī)錛屽畠渚涚粰閭d簺鎯寵浠ヤ竴縐嶇畝鍗曠殑鏂瑰紡浣跨敤AJAX鍜孹MLHttpRequest鐨勫紑鍙戣呫傚畠鍏鋒湁涓濂桱avascript鍔熻兘闆嗭紝瀹冧滑鎶婁粠HTML欏甸潰璋冪敤搴旂敤鏈嶅姟鍣ㄤ笂鐨凧ava瀵硅薄鐨勬柟娉曠畝鍖栦簡銆傚畠鎿嶆帶涓嶅悓綾誨瀷鐨勫弬鏁幫紝騫跺悓鏃朵繚鎸佷簡HTML浠g爜鐨勫彲璇繪с?br />
DWR涓嶆槸瀵逛竴涓璁$殑鎻掑叆錛屼篃涓嶅己榪璞′嬌鐢ㄤ換浣曠綾葷殑緇ф壙緇撴瀯銆傚畠鍜宻ervlet妗嗘灦鍐呯殑搴旂敤閰嶅悎鐨勫緢濂姐傚緙哄皯DHTML緙栫▼緇忛獙鐨勫紑鍙戣呮潵璇達紝DWR涔熸彁渚涗簡涓涓狫avaScript搴撳寘鍚簡緇忓父浣跨敤鐨凞HTML浠誨姟錛屽緇勮琛紝鐢╥tem濉厖select涓嬫媺妗嗭紝鏀瑰彉HTML鍏冪礌鐨勫唴瀹癸紝濡?lt;div>鍜?lt;span>
DWR緗戠珯鏄灝界殑騫朵笖鏈夊ぇ閲忕殑鏂囨。錛岃繖涔熸槸榪欑瘒鏂囩珷鐨勫熀紜銆備竴浜涗緥瀛愮敤鏉ュ睍紺篋WR濡備綍浣跨敤鍜岀敤瀹冪殑搴撳彲浠ュ畬鎴愪粈涔堟牱鐨勫伐浣溿?br />
榪欑瘒鏂囩珷璁╄鑰呯湅鍒頒簡涓涓嬌鐢ㄤ簡DWR鐨刉eb搴旂敤鏄浣曚竴姝ユ寤虹珛鐨勩傛垜浼氬睍紺哄垱寤鴻繖涓畝鍗曠殑紺轟緥搴旂敤鐨勫繀瑕佺殑緇嗚妭錛岃繖涓簲鐢ㄦ槸鍙笅杞界殑騫朵笖鍙互鍦ㄤ綘鐨勭幆澧冧腑甯冪講鏉ョ湅鐪婦WR濡備綍宸ヤ綔銆?br />娉ㄦ剰錛氭壘鍒版湁鍏矨JAX鐨勪俊鎭茍涓嶅洶闅?緗戦〉涓婃湁鍑犵瘒鏂囩珷鍜屽崥瀹㈢殑鏉$洰娑電洊浜嗚繖涓富棰橈紝姣忎竴涓兘璇曞浘鎸囧嚭鍜岃瘎璁鴻繖涓蹇電殑涓嶅悓鐨勬柟闈€傚湪璧勬簮閮ㄥ垎錛屼綘浼氭壘鍒頒竴浜涙湁瓚g殑鎸囧悜紺轟緥鍜屾枃绔犵殑閾炬帴錛屾潵瀛︿範AJAX鐨勬洿澶氱殑鍐呭銆?br />
紺轟緥搴旂敤
榪欑瘒鏂囩珷浣跨敤鐨勭ず渚嬪簲鐢ㄦā鎷熶簡澶氫雞澶氱殑涓涓叕瀵撳嚭縐熸悳绱㈠紩鎿庛傜敤鎴峰彲浠ュ湪鎼滅儲鍓嶉夋嫨涓緇勬悳绱㈡爣鍑嗐備負浜嗘彁楂樹氦浜掓э紝AJAX涓互涓嬩袱縐嶆儏鍐典笅浣跨敤錛?br />路搴旂敤閫氬憡鐢ㄦ埛閰嶅悎浠栫殑閫夋嫨浼氳繑鍥炲灝戞悳绱㈢粨鏋溿傝繖涓暟瀛楁槸瀹炴椂鏇存柊鐨?浣跨敤AJAX-褰撶敤鎴烽夋嫨鐨勫崸瀹ゅ拰嫻村鐨勬暟閲忥紝鎴栬呬環(huán)鏍艱寖鍥村彉鍖栨椂銆傚綋絎﹀悎鏍囧噯鐨勬悳绱㈢粨鏋滄病鏈夋垨澶鏃訛紝鐢ㄦ埛灝辨病鏈夊繀瑕佺偣鍑繪悳绱㈡寜綰姐?br />路鏁版嵁搴撴煡璇㈠茍鍙栧洖緇撴灉鏄敱AJAX瀹屾垚鐨勩傚綋鐢ㄦ埛鎸変笅鏄劇ず緇撴灉鎸夐挳鏃訛紝鏁版嵁搴撴墽琛屾悳绱€傝繖鏍鳳紝搴旂敤鐪嬭搗鏉ユ洿鍏峰搷搴斾簡錛岃屾暣涓〉闈笉闇瑕侀噸杞芥潵鏄劇ず緇撴灉銆?br />
鏁版嵁搴?/span>
鎴戜滑浣跨敤鐨勬暟鎹簱鏄疕SQL錛屽畠鏄竴縐嶅崰鐢ㄨ祫婧愬緢灝忕殑Java SQL鏁版嵁搴撳紩鎿庯紝鍙互涓嶉渶瑕佸畨瑁呭拰閰嶇疆鐨勪笌Web搴旂敤鎹嗙粦鍦ㄤ竴璧楓備竴涓猄QL鏂囦歡琚敤鏉ュ湪Web搴旂敤鐨勪笂涓嬫枃鍚姩鏃跺垱寤轟竴涓唴瀛樹腑鐨勮〃騫舵坊鍔犱竴浜涜褰曘?br />
Java綾?/span>
搴旂敤鍖呭惈浜嗕袱涓富瑕佺殑綾誨彨Apartment鍜孉partmentDAO銆侫partment.java綾繪槸涓涓湁鐫灞炴у拰getter/setter鏂規(guī)硶鐨勭畝鍗曠殑Java綾匯侫partmentDAO.java鏄暟鎹闂被錛岀敤鏉ユ煡璇㈡暟鎹簱騫跺熀浜庣敤鎴風殑鎼滅儲鏍囧噯鏉ヨ繑鍥炰俊鎭侫partmentDAO綾葷殑瀹炵幇鐨勭洿鎺ヤ簡褰撶殑;瀹冪洿鎺ヤ嬌鐢ㄤ簡Java鏁版嵁搴撹仈鎺ヨ皟鐢ㄦ潵寰楀埌鍏瘬鐨勬繪暟鍜岀鍚堢敤鎴瘋姹傜殑鍙敤鍏瘬鐨勫垪琛ㄣ?br />
DWR閰嶇疆鍜屼嬌鐢?/span>
璁劇疆DWR鐨勪嬌鐢ㄦ槸綆鍗曠殑錛氬皢DWR鐨刯ar鏂囦歡鎷峰叆Web搴旂敤鐨刉EB-INF/lib鐩綍涓紝鍦╳eb.xml涓鍔犱竴涓猻ervlet澹版槑錛屽茍鍒涘緩DWR鐨勯厤緗枃浠躲侱WR鐨勫垎鍙戜腑闇瑕佷嬌鐢ㄤ竴涓崟鐙殑jar鏂囦歡銆備綘蹇呴』灝咲WR servlet鍔犲埌搴旂敤鐨刉EB-INF/web.xml涓竷緗叉弿榪版涓幓銆?br />
聽聽聽聽<servlet>
聽聽聽聽聽聽聽聽<servlet-name>dwr-invoker</servlet-name>
聽聽聽聽聽聽聽聽<display-name>DWR Servlet</display-name>
聽聽聽聽聽聽聽聽<description>Direct Web Remoter Servlet</description>
聽聽聽聽聽聽聽聽<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
聽聽聽聽聽聽聽聽<init-param>
聽聽聽聽聽聽聽聽聽聽聽聽<param-name>debug</param-name>
聽聽聽聽聽聽聽聽聽聽聽聽<param-value>true</param-value>
聽聽聽聽聽聽聽聽</init-param>
聽聽聽聽</servlet>
聽聽聽聽<servlet-mapping>
聽聽聽聽聽聽聽聽<servlet-name>dwr-invoker</servlet-name>
聽聽聽聽聽聽聽聽<url-pattern>/dwr/*</url-pattern>
聽聽聽聽</servlet-mapping>
涓涓彲閫夌殑姝ラ鏄緗瓺WR涓鴻皟璇曟ā寮忊旇薄涓婇潰鐨勪緥瀛愰偅鏍封斿湪servlet鎻忚堪孌典腑灝哾ebug鍙傛暟璁句負true銆傚綋DWR鍦ㄨ皟璇曟ā寮忔椂錛屼綘鍙互浠嶩TMl緗戦〉涓湅鍒版墍鏈夌殑鍙闂殑Java瀵硅薄銆傚寘鍚簡鍙敤瀵硅薄鍒楄〃鐨勭綉欏典細鍑虹幇鍦?WEBAPP/dwr榪欎釜url涓婏紝瀹冩樉紺轟簡瀵硅薄鐨勫叕鍏辨柟娉曘傛墍鍒楁柟娉曞彲浠ヤ粠欏甸潰涓皟鐢紝鍏佽浣狅紝絎竴嬈★紝榪愯鏈嶅姟鍣ㄤ笂鐨勫璞$殑鏂規(guī)硶銆備笅鍥炬樉紺轟簡璋冭瘯欏電殑鏍峰瓙:
璋冭瘯欏?br />
鐜板湪浣犲繀欏昏DWR鐭ラ亾閫氳繃XMLHttpRequest瀵硅薄錛屼粈涔堝璞″皢浼氭帴鏀惰姹傘傝繖涓換鍔$敱鍙仛dwr.xml鐨勯厤緗枃浠舵潵瀹屾垚銆傚湪閰嶇疆鏂囦歡涓紝瀹氫箟浜咲WR鍏佽浣犱粠緗戦〉涓皟鐢ㄧ殑瀵硅薄銆備粠璁捐涓婅錛孌WR鍏佽璁塊棶鎵鏈夊叕甯冪被鐨勫叕鍏辨柟娉曪紝浣嗗湪鎴戜滑鐨勪緥瀛愪腑錛屾垜浠彧鍏佽璁塊棶鍑犱釜鏂規(guī)硶銆備笅闈㈡槸鎴戜滑紺轟緥鐨勯厤緗枃浠?
<dwr>
聽聽聽聽<allow>
聽聽聽聽聽聽聽聽<convert converter="bean" match="dwr.sample.Apartment"/>
聽聽聽聽聽聽聽聽<create creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
聽聽聽聽聽聽聽聽聽聽聽聽<include method="findApartments"/>
聽聽聽聽聽聽聽聽聽聽聽聽<include method="countApartments"/>
聽聽聽聽聽聽聽聽</create>
聽聽聽聽</allow>
</dwr>
涓婇潰鐨勬枃浠跺疄鐜頒簡鎴戜滑渚嬪瓙涓殑涓や釜鐩爣銆傞鍏堬紝<convert>鏍囪鍛婅瘔DWR灝哾wr.sample.Apartment瀵硅薄鐨勭被鍨嬭漿鎹負鑱斿悎鏁扮粍錛屽洜涓猴紝鍑轟簬瀹夊叏鐨勫師鍥狅紝DWR榛樿鐨勪笉浼氳漿鎹㈡櫘閫歜ean銆傜浜岋紝<create>鏍囪璁〥WR鏆撮湶鍑篸wr.sample.ApartmentDAO綾葷粰JavaScript璋冪敤;鎴戜滑鍦ㄩ〉闈腑浣跨敤JavaScript鏂囦歡琚玧avascript灞炴у畾涔夈傛垜浠繀欏繪敞鎰?lt;include>鏍囪錛屽畠鎸囨槑浜哾wr.sample.ApartmentDAO綾葷殑鍝簺鏂規(guī)硶鍙敤銆?br />
HTML/JSP浠g爜
閰嶇疆瀹屾垚鍚庯紝浣犲氨鍙互鍚姩浣犵殑Web搴旂敤浜嗭紝榪欐椂DWR浼氫負浠庝綘鐨凥TML鎴朖ava鏈嶅姟鍣ㄧ欏甸潰(JSP)涓婅皟鐢ㄦ墍闇鏂規(guī)硶浣滃ソ鍑嗗錛屽茍涓嶉渶瑕佷綘鍒涘緩JavaScript鏂囦歡銆傚湪search.jsp鏂囦歡涓紝 鎴戜滑蹇呴』澧炲姞鐢盌WR鎻愪緵鐨凧avaScript鎺ュ彛錛岃繕鏈塂WR寮曟搸錛屽姞鍏ヤ互涓嬩笁琛屽埌鎴戜滑鐨勪唬鐮佷腑錛?br />
聽聽<script src='dwr/interface/ApartmentDAO.js'></script>
聽聽<script src='dwr/engine.js'></script>
聽聽<script src='dwr/util.js'></script>
鎴戜滑娉ㄦ剰鍒板綋鐢ㄦ埛鏀瑰彉鎼滅儲鏍囧噯鏃訛紝榪欐槸AJAX鍦ㄧず渚嬬▼搴忎腑鐨勯嬈″簲鐢?姝e浠栨墍鐪嬪埌鐨勶紝褰撴爣鍑嗘敼鍙樻椂錛屽彲鐢ㄧ殑鍏瘬鏁伴噺琚洿鏂頒簡銆傛垜鍒涘緩浜嗕袱涓狫avaScript鍑芥暟錛氬綋鏌愪竴涓夋嫨涓嬫媺妗嗕腑鐨勫煎彉鍖栨椂琚皟鐢ㄣ侫partmentDAO.countApartments()鍑芥暟鏄渶閲嶈鐨勯儴鍒嗐傛渶鏈夎叮鐨勬槸絎竴涓弬鏁? loadTotal()鍑芥暟錛屽畠鎸囨槑浜嗗綋鎺ユ敹鍒版湇鍔$鐨勮繑鍥炴椂DWR灝嗕細璋冪敤鐨凧avaScript鏂規(guī)硶銆俵oadTotal浜庢槸琚皟鐢ㄦ潵鍦℉TML欏甸潰鐨?lt;div>涓樉紺虹粨鏋溿備笅闈㈡槸鍦ㄨ繖涓氦浜掑満鏅腑鎵浣跨敤鍒扮殑JavaScript鍑芥暟:
function updateTotal() {
聽聽聽聽$("resultTable").style.display = 'none';
聽聽聽聽var bedrooms = document.getElementById("bedrooms").value;
聽聽聽聽var bathrooms = document.getElementById("bathrooms").value;
聽聽聽聽var price = document.getElementById("price").value;
聽聽聽聽ApartmentDAO.countApartments(loadTotal, bedrooms, bathrooms, price);
}
function loadTotal(data) {
聽聽聽聽document.getElementById("totalRecords").innerHTML = data;
}
寰堟槑鏄撅紝鐢ㄦ埛鎯崇湅鍒扮鍚堜粬鐨勬悳绱㈡潯浠剁殑鍏瘬鍒楄〃銆傞偅涔堬紝褰撶敤鎴峰浠栫殑鎼滅儲鏍囧噯鎰熷埌婊℃剰錛屽茍涓旀繪暟涔熸槸鏈夋晥鐨勮瘽錛屼粬浼氭寜涓嬫樉紺虹粨鏋滅殑鎸夌航錛岃繖灝嗕細璋冪敤updateResults() JavaScript鏂規(guī)硶錛?br />
function updateResults() {
聽聽聽聽
聽聽聽聽DWRUtil.removeAllRows("apartmentsbody");
聽聽聽聽var bedrooms = document.getElementById("bedrooms").value;
聽聽聽聽var bathrooms = document.getElementById("bathrooms").value;
聽聽聽聽var price = document.getElementById("price").value;
聽聽聽聽ApartmentDAO.findApartments(fillTable, bedrooms, bathrooms, price);
聽聽聽聽$("resultTable").style.display = '';
}
function fillTable(apartment) {
聽聽聽聽DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}
updateResults()鏂規(guī)硶娓呯┖浜嗗瓨鏀炬悳绱㈣繑鍥炵粨鏋滅殑琛ㄥ煙錛屼粠鐢ㄦ埛鐣岄潰涓婅幏鍙栨墍闇鍙傛暟錛屽茍涓斿皢榪欎簺鍙傛暟浼犵粰DWR鍒涘緩鐨凙partmentDAO瀵硅薄銆傜劧鍚庢暟鎹簱鏌ヨ灝嗚鎵ц錛宖illTable()灝嗕細琚皟鐢紝瀹冭В鏋愪簡DWR榪斿洖鐨勫璞?apartment)錛岀劧鍚庡皢鍏舵樉紺哄埌欏甸潰涓?apartmentsbody)銆?br />
瀹夊叏鍥犵礌
涓轟簡淇濇寔紺轟緥鐨勭畝瑕侊紝ApartmentDAO綾誨敖鍙兘鐨勪繚鎸佺畝鍗曪紝浣嗚繖鏍風殑涓涓被閫氬父鏈変竴緇勮緗柟娉曟潵鎿嶄綔鏁版嵁錛屽insert(), update()鍜宒elete()銆侱WR鏆撮湶浜嗘墍鏈夊叕鍏辨柟娉曠粰鎵鏈夌殑HTML欏甸潰璋冪敤銆傚嚭浜庡畨鍏ㄧ殑鍘熷洜錛屽儚榪欐牱鏆撮湶浣犵殑鏁版嵁璁塊棶灞傛槸涓嶆槑鏅虹殑銆傚紑鍙戣呭彲浠ュ垱寤轟竴涓棬闈㈡潵闆嗕腑鎵鏈塉avaScript鍑芥暟涓庡簳灞備笟鍔$粍浠朵箣闂寸殑閫氫俊錛岃繖鏍峰氨闄愬埗浜嗚繃澶氭毚闇茬殑鍔熻兘銆?br />
緇撹
榪欑瘒鏂囩珷浠呬粎璁╀綘鍦ㄤ綘鐨勯」鐩腑浣跨敤鐢盌WR鏀寔鐨凙JAX寮浜嗕釜澶淬侱WR璁╀綘闆嗕腑娉ㄦ剰鍔涘湪濡備綍鎻愰珮浣犵殑搴旂敤鐨勪氦浜掓ā鍨嬩笂闈紝娑堥櫎浜嗙紪鍐欏拰璋冭瘯JavaScript浠g爜鐨勮礋鎷呫備嬌鐢ˋJAX鏈鏈夎叮鐨勬寫鎴樻槸瀹氫箟鍦ㄥ摢閲屽拰濡備綍鎻愰珮鍙敤鎬с侱WR璐熻矗浜嗘搷浣淲eb欏甸潰涓庝綘鐨凧ava瀵硅薄涔嬮棿鐨勯氫俊錛岃繖鏍峰氨甯姪浣犲畬鍏ㄩ泦涓敞鎰忓姏鍦ㄥ浣曡浣犵殑搴旂敤鐨勭敤鎴風晫闈㈡洿鍔犲弸濂斤紝
鎴戞兂鎰熻阿Mircea Oancea鍜孧arcos Pereira,浠栦滑闃呰浜嗚繖綃囨枃绔犲茍緇欎簣浜嗛潪甯告湁浠峰肩殑榪斿尞銆?br />
璧勬簮
路javaworld.com:
javaworld.com
路Matrix-Java寮鍙戣呯ぞ鍖?
http://www.matrix.org.cn/
路onjava.com:
onjava.com
路涓嬭澆紺轟緥紼嬪簭鐨勫叏閮ㄦ簮鐮?
http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
路DWR: http://www.getahead.ltd.uk/dwr/index.html
路HSQL:http://hsqldb.sourceforge.net/
路AJAX鐨勫畾涔?http://en.wikipedia.org/wiki/AJAX
路 鈥淎JAX:閫氬悜Web搴旂敤鐨勬柊閫斿緞": Jesse James Garrett (Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
路 鈥滈潪甯稿姩鎬佺殑Web鐣岄潰鈥?Drew McLellan (xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
路XMLHttpRequest & AJAX 宸ヤ綔鑼冧緥: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
路 鈥滃彲鐢ㄧ殑XMLHttpRequest瀹炶返鈥?Thomas Baekdal (Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
路"XMLHttpRequest浣跨敤瀵煎紩" Thomas Baekdal (Baekdal.com,聽聽2005.2):http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/
路AJAX瀹炶川:http://www.ajaxmatters.com/
(鐪嬪畬鍚庝釜浜烘劅瑙夛細鏈変簡DWR灝盝AVA寮鍙戣岃█錛屽畬鍏ㄥ彲浠ヤ笌AJAX鍖規(guī)晫鍟︼紝鐪佷簡鍦↗S涓婂XMLHTTP浠ュ強瀵笵OM鐨勫鐞嗭紝涓嶅彲浠ラ伩鍏嶅湴鍦ㄥ悗鍙板搴旂殑IO澶勭悊錛涚劧鍚庡氨DWR鏉ヨ錛屽畠澧炲姞浜嗗XML涓搴旂殑閰嶇疆--鍦ㄥ紑婧愭鏋朵腑浼間箮涓鐩翠笉鏇懼仠姝㈣繃銆傝繕鏈夊涓浜汥WR鑷湁鐢ㄦ硶濡侱WRUtil.addRows寰楀弬鑰冨叾鐩稿叧鏂囨。---褰撶劧榪欐牱鐨勫姛鑳芥垜浠嚜宸變篃鍙互鐢↗S鏉ヨВ鍐籌紝騫朵笖瀹冩樉鐒跺緢瀹炵敤銆俛dd by jkallen)
]]>
鍥犱負瑕佺敤鍒癆jax灝辮偗瀹氳鐢ㄥ埌XMLHttpRequest瀵硅薄錛屼絾鐢變簬涓嶅悓鐨勬祻瑙堝櫒鐗堟湰錛岀浉搴旂殑鐢熸垚瀹冪殑鏂規(guī)硶涔熸湁鎵涓嶅悓錛屾墍浠ユ垜浠笉寰椾笉瀵規(guī)祻瑙堝櫒鐨勭増鏈繘琛屽垽鏂紝璇曟兂錛屽鏋滄垜浠鍦ㄥ緢澶氬湴鏂歸兘瑕佸啓閭d簺綣佺悙鐨勪唬鐮佷細瑙夌殑寰堥夯鐑︼紝浠g爜鐨勯噸鐢ㄤ篃寰堜綆錛屾墍浠ユ垜浠啓涓涓狝jax鐨勫璞°備唬鐮佸涓嬶細
//*********************************************************
// 鐩殑錛毬犅犅?AJAX綾?br />// 杈撳叆錛毬犅犅?鏃?br />// 榪斿洖錛毬犅犅?榪斿洖XMLHttp瀵硅薄
// 渚嬪瓙錛毬犅犅?var myConn = new XHConn();
//
//聽聽聽聽聽聽聽聽聽聽 if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
//
//聽聽聽聽聽聽聽聽聽聽 var fnWhenDone = function (oXML) { alert(oXML.responseText); };
//
//聽聽聽聽聽聽聽聽聽聽 myConn.connect("mypage.php", "POST", "foo=bar&baz=qux", fnWhenDone);
//
//*********************************************************
function XHConn()
{
聽 var xmlhttp = false, bComplete = false;
聽 try
聽 {
聽 聽xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
聽 }
聽 catch (e)
聽 {
聽 聽try
聽 聽{
聽 聽聽xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
聽 聽}
聽聽聽 catch (e)
聽聽聽 {
聽 聽聽try
聽 聽聽{
聽 聽聽聽xmlhttp = new XMLHttpRequest();
聽 聽聽}
聽 聽聽catch (e)
聽 聽聽{
聽 聽聽聽xmlhttp = false;
聽 聽聽}
聽 聽}
聽 }
聽 if (!xmlhttp) return null;
聽 this.connect = function(sURL, sMethod, sVars, fnDone)
聽 {
聽聽聽 if (!xmlhttp) return false;
聽聽聽 bComplete = false;
聽聽聽 sVars = (sVars == '') ? Math.random() : sVars + "&" + Math.random();
聽聽聽 sMethod = sMethod.toUpperCase();
聽聽聽 try
聽聽聽 {
聽聽聽聽聽 if (sMethod == "GET")
聽聽聽聽聽 {
聽聽聽聽聽聽聽 xmlhttp.open(sMethod, sURL+"?"+sVars, true);
聽聽聽聽聽聽聽 xmlhttp.setRequestHeader("Content-Type", "text/html;charset=GB2312");
聽聽聽聽聽聽聽 sVars = "";
聽聽聽聽聽 }
聽聽聽聽聽 else
聽聽聽聽聽 {
聽聽聽聽聽聽聽 xmlhttp.open(sMethod, sURL, true);
聽聽聽聽聽聽聽 xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
聽聽聽聽聽聽聽 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
聽聽聽聽聽 }
聽聽聽聽聽 xmlhttp.onreadystatechange = function()
聽聽聽聽聽 {
聽聽聽聽聽聽聽 if (xmlhttp.readyState == 4 && !bComplete)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽 bComplete = true;
聽聽聽聽聽聽聽聽聽 fnDone(xmlhttp);
聽聽聽聽聽聽聽 }
聽聽聽聽聽 };
聽聽聽聽聽
聽聽聽聽聽 xmlhttp.send(sVars);
聽聽聽 }
聽聽聽 catch(z)
聽聽聽 {
聽聽聽 聽return false;
聽聽聽 }
聽聽聽 return true;
聽 };
聽
聽 return this;
}
閫氳繃榪欎釜瀵硅薄錛屾垜浠妸閭d簺綣佺悙鐨勪唬鐮侀兘灝佽鍒伴噷闈紝榪欐牱澶уぇ鎻愰珮浜嗕唬鐮佺殑閲嶇敤鎬э紝姣忔瑕佺敤Ajax鏃舵垜浠彧闇瑕佸湪鎴戜滑鐨勯〉闈笂 new涓涓猉HConn()瀵硅薄灝辮浜嗭紝鐒跺悗閫氳繃璋冪敤瀹冪殑鏂規(guī)硶connect錛坰URL, sMethod, sVars, fnDone錛夊氨鍙互鍜屾湇鍔″櫒榪涜寮傛浜や簰浜嗐?/font>