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

首頁 > 語言 > JavaScript > 正文

原生JavaScript實現Ajax異步請求

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

在前端頁面開發的過程中,經常使用到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);}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南京市| 普兰县| 中卫市| 湖北省| 三门峡市| 和政县| 三门峡市| 乳源| 扶余县| 瑞安市| 钦州市| 迭部县| 沐川县| 望江县| 扶余县| 江永县| 石屏县| 绥宁县| 徐闻县| 文成县| 美姑县| 庆云县| 盐源县| 奇台县| 瑞丽市| 洪洞县| 宣城市| 伊川县| 达尔| 修文县| 江陵县| 讷河市| 嫩江县| 普兰县| 黄浦区| 徐州市| 济南市| 枣庄市| 桐城市| 黄石市| 德化县|