在前端頁(yè)面開(kāi)發(fā)的過(guò)程中,經(jīng)常使用到Ajax請(qǐng)求,異步提交表單數(shù)據(jù),或者異步刷新頁(yè)面。
創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營(yíng)銷(xiāo)推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)成都崗?fù)?/a>等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專(zhuān)業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞心悅目的作品。 與客戶(hù)共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!一般來(lái)說(shuō),使用Jquery中的$.ajax,$.post,$.getJSON
,非常方便,但是有的時(shí)候,我們只因?yàn)樾枰猘jax功能而引入Jquery比較不劃算。
所以接下來(lái)便用原生JavaScrpit實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Ajax請(qǐng)求,并說(shuō)明ajax請(qǐng)求中的跨域訪(fǎng)問(wèn)問(wèn)題,以及多個(gè)ajax請(qǐng)求的數(shù)據(jù)同步問(wèn)題。
JavaScript實(shí)現(xiàn)Ajax異步請(qǐng)求
簡(jiǎn)單的ajax請(qǐng)求實(shí)現(xiàn)
Ajax請(qǐng)求的原理是創(chuàng)建一個(gè)XMLHttpRequest對(duì)象,使用這個(gè)對(duì)象來(lái)進(jìn)行異步發(fā)送請(qǐng)求,具體實(shí)現(xiàn)參考下面代碼:
function ajax(option) { // 創(chuàng)建一個(gè) XMLHttpRequest 對(duì)象 var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"), requestData = option.data, requestUrl = option.url, requestMethod = option.method; // 如果是GET請(qǐng)求,需要將option中的參數(shù)拼接到URL后面 if ('POST' != requestMethod && requestData) { var query_string = ''; // 遍歷option.data對(duì)象,構(gòu)建GET查詢(xún)參數(shù) for(var item in requestData) { query_string += item + '=' + requestData[item] + '&'; } // 注意這兒拼接的時(shí)候,需要判斷是否已經(jīng)有 ? requestUrl.indexOf('?') > -1 ? requestUrl = requestUrl + '&' + query_string : requestUrl = requestUrl + '?' + query_string; // GET 請(qǐng)求參數(shù)放在URL中,將requestData置為空 requestData = null; } // ajax 請(qǐng)求成功之后的回調(diào)函數(shù) xhr.onreadystatechange = function () { // readyState=4表示接受響應(yīng)完畢 if (xhr.readyState == ("number" == typeof XMLHttpRequest.DONE ? XMLHttpRequest.DONE : 4)) { if (200 == xhr.status) { // 判斷狀態(tài)碼 var response = xhr.response || xhr.responseText || {}; // 獲取返回值 // if define success callback, call it, if response is string, convert it to json objcet console.log(response); option.success && option.success(response); // 調(diào)用成功的回調(diào)函數(shù)處理返回值 // 可以判斷返回?cái)?shù)據(jù)類(lèi)型,對(duì)數(shù)據(jù)進(jìn)行JSON解析或者XML解析 // option.success && option.success('string' == typeof response ? JSON.parse(response) : response); } else { // if define error callback, call it option.error && option.error(xhr, xhr.statusText); } } }; // 發(fā)送ajax請(qǐng)求 xhr.open(requestMethod, requestUrl, true); // 請(qǐng)求超時(shí)的回調(diào) xhr.ontimeout = function () { option.timeout && option.timeout(xhr, xhr.statusText); }; // 定義超時(shí)時(shí)間 xhr.timeout = option.timeout || 0; // 設(shè)置響應(yīng)頭部,這兒默認(rèn)設(shè)置為json格式,可以定義為其他格式,修改頭部即可 xhr.setRequestHeader && xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8'); xhr.withCredentials = (option.xhrFields || {}).withCredentials; // 這兒主要用于發(fā)送POST請(qǐng)求的數(shù)據(jù) xhr.send(requestData); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。