您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么創(chuàng)建基本的Ajax應(yīng)用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么創(chuàng)建基本的Ajax應(yīng)用”吧!
創(chuàng)建一個基本的Ajax應(yīng)用不需要太多的代碼,大概三個步驟,幾十行代碼即可。
1,創(chuàng)建Ajax的核心對象XMLHttpRequest
因為瀏覽器之間的不兼容,IE7之前的版本并沒有原生的XMLHttpRequest對象卻實現(xiàn)為ActiveX對象。
互聯(lián)網(wǎng)及各種書籍中有著多種創(chuàng)建方式,有的復(fù)雜很多行代碼,有的則簡潔很少代碼。當(dāng)然復(fù)雜的考慮的情形更多一些。如下幾乎將IE中所有的情況都考慮到了。
function cretaeXHR(){ try{ return new XMLHttpRequest();}catch(e){} try{ return new ActiveXObject('Msxml2.XMLHTTP.6.0');}catch(e){} try{ return new ActiveXObject('Msxml2.XMLHTTP.4.0');}catch(e){} try{ return new ActiveXObject('Msxml2.XMLHTTP.3.0');}catch(e){} try{ return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){} try{ return new ActiveXObject('MSXML3.XMLHTTP');}catch(e){} try{ return new ActiveXObject('MSXML.XMLHTTP');}catch(e){} try{ return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){} try{ return new ActiveXObject('MSXML2.ServerXMLHTTP');}catch(e){} return null; }
代碼較少的采用對象特性判斷,
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() :new ActiveXObject('Microsoft.XMLHTTP');
我在這里采用精簡方式,暫不考慮創(chuàng)建異常的情況。
2,發(fā)送請求
xhr.open xhr.send
3,處理響應(yīng)
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){//當(dāng)然你可以把200~300之間或304的都理解成響應(yīng)成功 //callback } } }
嗯,到這里沒什么特別的,所有的書籍上都是這么幾個步驟來著。對于初學(xué)者來說,要將這幾個步驟很好的封裝一下形成一個良好的模塊還是很困難的。全局變量滿天飛不知道怎么去組織代碼,初學(xué)者開始都是這樣的。現(xiàn)在想想是對一門語言沒有足夠的掌握,尤其是閉包。
這里采用 單例模式 封裝成一個對象,即只有一個全局的變量將其賦值給Ajax,該對象有一個request方法。request有兩個參數(shù),***個為請求的url(必要的),字符串類型,第二個opt為配置參數(shù)(可選的),對象類型。結(jié)果處理使用內(nèi)部私有的_onStateChange函數(shù)。
完整代碼如下:
/** * 執(zhí)行基本ajax請求,返回XMLHttpRequest * Ajax.request(url,{ * async 是否異步 true(默認) * method 請求方式 POST or GET(默認) * data 請求參數(shù) (鍵值對字符串) * success 請求成功后響應(yīng)函數(shù),參數(shù)為xhr * failure 請求失敗后響應(yīng)函數(shù),參數(shù)為xhr * }); */ Ajax = function(){ function request(url,opt){ function fn(){} var async = opt.async !== false, method = opt.method || 'GET', data = opt.data || null, success = opt.success || fn, failure = opt.failure || fn; method = method.toUpperCase(); if(method == 'GET' && data){ url += (url.indexOf('?') == -1 ? '?' : '&') + data; data = null; } var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); xhr.onreadystatechange = function(){ _onStateChange(xhr,success,failure); }; xhr.open(method,url,async); if(method == 'POST'){ xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;'); } xhr.send(data); return xhr; } function _onStateChange(xhr,success,failure){ if(xhr.readyState == 4){ var s = xhr.status; if(s>= 200 && s < 300){ success(xhr); }else{ failure(xhr); } }else{} } return {request:request}; }();
如下請求后臺的一個servlet,發(fā)送參數(shù)name=jack,age=20,默認使用異步,GET方式
Ajax.request('servlet/ServletJSON',{ data : 'name=jack&age=20', success : function(xhr){ //to do with xhr }, failure : function(xhr){ //to do with xhr } } );
感謝各位的閱讀,以上就是“怎么創(chuàng)建基本的Ajax應(yīng)用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么創(chuàng)建基本的Ajax應(yīng)用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。