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

首頁 > 語言 > JavaScript > 正文

原生JavaScrpit中異步請求Ajax實現方法

2024-05-06 15:24:50
字體:
來源:轉載
供稿:網友

在前端頁面開發的過程中,經常使用到Ajax請求,異步提交表單數據,或者異步刷新頁面。

一般來說,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的時候,我們只因為需要ajax功能而引入Jquery比較不劃算。

所以接下來便用原生JavaScrpit實現一個簡單的Ajax請求,并說明ajax請求中的跨域訪問問題,以及多個ajax請求的數據同步問題。

JavaScript實現Ajax異步請求

簡單的ajax請求實現

Ajax請求的原理是創建一個XMLHttpRequest對象,使用這個對象來進行異步發送請求,具體實現參考下面代碼:

function ajax(option) {  // 創建一個 XMLHttpRequest 對象  var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"),    requestData = option.data,    requestUrl = option.url,    requestMethod = option.method;  // 如果是GET請求,需要將option中的參數拼接到URL后面  if ('POST' != requestMethod && requestData) {    var query_string = '';    // 遍歷option.data對象,構建GET查詢參數    for(var item in requestData) {      query_string += item + '=' + requestData[item] + '&';    }    // 注意這兒拼接的時候,需要判斷是否已經有 ?    requestUrl.indexOf('?') > -1      ? requestUrl = requestUrl + '&' + query_string      : requestUrl = requestUrl + '?' + query_string;    // GET 請求參數放在URL中,將requestData置為空    requestData = null;  }  // ajax 請求成功之后的回調函數  xhr.onreadystatechange = function () {    // readyState=4表示接受響應完畢    if (xhr.readyState == ("number" == typeof XMLHttpRequest.DONE ? XMLHttpRequest.DONE : 4)) {      if (200 == xhr.status) { // 判斷狀態碼        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); // 調用成功的回調函數處理返回值        // 可以判斷返回數據類型,對數據進行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);      }    }  };  // 發送ajax請求  xhr.open(requestMethod, requestUrl, true);  // 請求超時的回調  xhr.ontimeout = function () {    option.timeout && option.timeout(xhr, xhr.statusText);  };  // 定義超時時間  xhr.timeout = option.timeout || 0;  // 設置響應頭部,這兒默認設置為json格式,可以定義為其他格式,修改頭部即可  xhr.setRequestHeader && xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');  xhr.withCredentials = (option.xhrFields || {}).withCredentials;  // 這兒主要用于發送POST請求的數據  xhr.send(requestData);}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 雷山县| 上犹县| 泾川县| 英德市| 台湾省| 乐陵市| 四平市| 阜宁县| 石屏县| 鄂伦春自治旗| 辛集市| 如东县| 杨浦区| 密山市| 枞阳县| 综艺| 福泉市| 崇义县| 房产| 丽水市| 蒙自县| 广德县| 公安县| 策勒县| 资兴市| 贺州市| 交口县| 德兴市| 东莞市| 义马市| 平顶山市| 新河县| 富锦市| 富蕴县| 襄城县| 达孜县| 白玉县| 屯留县| 辽源市| 麦盖提县| 太谷县|