国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

原生JS發(fā)送異步數(shù)據(jù)請求

2024-05-06 15:16:12
字體:
供稿:網(wǎng)友

在做項目的時候,有時候需要用到異步數(shù)據(jù)請求,但是如果這個時候沒有框架的依賴,就需要用到原生JS進(jìn)行異步數(shù)據(jù)請求。這時候無非有兩種請求方式,一種是AJAX,另一個是JSONP。通過原生JS對異步請求進(jìn)行簡單的封裝。

AJAX

  AJAX是一種數(shù)據(jù)請求方式,不需要刷新整個頁面就能夠更新局部頁面的數(shù)據(jù)。AJAX的技術(shù)核心是XMLHttpRequest對象,主要請求過程如下:

創(chuàng)建XMLHttpRequest對象(new) 連接服務(wù)器(open) 發(fā)送請求(send) 接收響應(yīng)數(shù)據(jù)(onreadystatechange)

  不說話直接貼代碼

/*** 通過JSON的方式請求* @param {[type]} params [description]* @return {[type]}  [description]*/ajaxJSON(params) { params.type = (params.type || 'GET').toUpperCase(); params.data = params.data || {}; var formatedParams = this.formateParams(params.data, params.cache); var xhr; //創(chuàng)建XMLHttpRequest對象 if (window.XMLHttpRequest) {  //非IE6  xhr = new XMLHttpRequest(); } else {  xhr = new ActiveXObject('Microsoft.XMLHTTP'); } //異步狀態(tài)發(fā)生改變,接收響應(yīng)數(shù)據(jù) xhr.onreadystatechange = function() {  if (xhr.readyState == 4 && xhr.status == 200) {   if (!!params.success) {    if (typeof xhr.responseText == 'string') {     params.success(JSON.parse(xhr.responseText));    } else {     params.success(xhr.responseText);    }   }  } else {   params.error && params.error(status);  } } if (params.type == 'GET') {  //連接服務(wù)器  xhr.open('GET', (!!formatedParams ? params.url + '?' + formatedParams : params.url), true);  //發(fā)送請求  xhr.send(); } else {  //連接服務(wù)器  xhr.open('POST', params.url, true);  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  //發(fā)送請求  xhr.send(formatedParams); }},/*** 格式化數(shù)據(jù)* @param {Obj}  data 需要格式化的數(shù)據(jù)* @param {Boolean} isCache 是否加入隨機參數(shù)* @return {String}   返回的字符串*/formateParams: function(data, isCache) { var arr = []; for (var name in data) {  arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name])); } if (isCache) {  arr.push('v=' + (new Date()).getTime()); } return arr.join('&');}

  IE7及其以上版本中支持原生的 XHR 對象,因此可以直接用:var oAjax = new XMLHttpRequest();。IE6及其之前的版本中,XHR對象是通過MSXML庫中的一個ActiveXObject對象實現(xiàn)的。

  通過xhr的open函數(shù)來連接服務(wù)器,主要接收三個參數(shù):請求方式、請求地址和是否異步請求(一般都是異步請求)。請求方式有兩種,GET和POST,GET是通過URL將數(shù)據(jù)提交到服務(wù)器的,POST則是通過將數(shù)據(jù)作為send方法的參數(shù)發(fā)送到服務(wù)器。

  給xhr綁定狀態(tài)改變函數(shù)onreadystatechange,主要用來檢測xhr的readyState的變化,當(dāng)異步發(fā)送成功后,readyState的數(shù)值會由0變成4,同時觸發(fā)onreadystatechange事件。readyState的屬性及對應(yīng)狀態(tài)如下:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 墨竹工卡县| 濮阳市| 西青区| 襄樊市| 印江| 贵南县| 高平市| 铜川市| 全椒县| 波密县| 韶山市| 囊谦县| 容城县| 台前县| 靖宇县| 太和县| 河间市| 鄂托克前旗| 察雅县| 海安县| 彰化县| 略阳县| 靖宇县| 昌都县| 池州市| 永安市| 松潘县| 鄂尔多斯市| 铜川市| 上杭县| 堆龙德庆县| 枝江市| 宕昌县| 普兰店市| 城口县| 来凤县| 白山市| 丹棱县| 永丰县| 循化| 密云县|