最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端JS調(diào)用后端API的3種實用方法(輕松搞定前后端數(shù)據(jù)交互)

 更新時間:2025年11月18日 09:28:06   作者:霽月的小屋  
在JavaScript開發(fā)中,調(diào)用接口是前端與后端交互的基礎(chǔ)操作之一,通過調(diào)用接口,前端頁面可以動態(tài)獲取數(shù)據(jù),實現(xiàn)頁面的動態(tài)展示與用戶交互,這篇文章主要介紹了前端JS調(diào)用后端API的3種實用方法,需要的朋友可以參考下

前端js調(diào)用后端API的三種方法

在 Web 開發(fā)中,前端與后端的協(xié)同是實現(xiàn)功能的核心環(huán)節(jié),而前端通過 JavaScript 調(diào)用后端 API 接口,更是實現(xiàn)數(shù)據(jù)交互、完成業(yè)務(wù)邏輯的關(guān)鍵步驟。無論是用戶登錄時的信息驗證,還是頁面數(shù)據(jù)的動態(tài)加載,都離不開 API 調(diào)用。本文將詳細介紹三種主流的前端 JS 調(diào)用后端 API 的方法,包括傳統(tǒng)的 XMLHttpRequest、簡化開發(fā)的 jQuery Ajax,以及現(xiàn)代項目常用的 axios 與 fetch,幫助開發(fā)者根據(jù)項目需求選擇合適的方案。

下面主要介紹三種方法來實現(xiàn)前端js對后端API接口的調(diào)用:

方法一XMLHttpRequest

方法二jQuery和Ajax

方法三axiosfetch

XMLHttpRequest

XMLHttpRequest(簡稱 XHR)是瀏覽器提供的原生 API,也是前端調(diào)用后端 API 的 “鼻祖” 級方案。它不依賴任何第三方庫,兼容性極強,能在幾乎所有主流瀏覽器中運行,適合需要兼顧老舊瀏覽器的項目。

(1)創(chuàng)建XMLHttpRequest對象;

(2)建立http連接;

(3)發(fā)送請求;

(4)獲取返回數(shù)據(jù)。

1.核心原理

通過創(chuàng)建 XMLHttpRequest 對象,配置請求方式(GET、POST 等)、請求 URL、是否異步等參數(shù),然后發(fā)送請求;同時監(jiān)聽對象的狀態(tài)變化,當請求完成且響應(yīng)成功時,獲取后端返回的數(shù)據(jù)并進行處理。

Post請求與Get請求主要有兩點不同:
①post請求需要設(shè)置請求頭的格式內(nèi)容:xhr.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
②post請求參數(shù)放在send里面,即請求體

2.實現(xiàn)步驟與代碼示例

// 1. 創(chuàng)建XMLHttpRequest對象
const xhr = new XMLHttpRequest();

// 2. 配置請求(請求方法、URL、是否異步)
// GET請求:若需傳參,可在URL后拼接(如"?id=1&name=test")
xhr.open('GET', 'https://api.example.com/user/list', true);

// 3. 設(shè)置請求頭(可選,根據(jù)后端要求配置,如POST請求傳JSON需設(shè)置)
// 若為POST請求,需添加:xhr.setRequestHeader('Content-Type', 'application/json');

// 4. 監(jiān)聽請求狀態(tài)變化,處理響應(yīng)
xhr.onreadystatechange = function() {
  // readyState=4表示請求已完成,status=200表示響應(yīng)成功
  if (xhr.readyState === 4 && xhr.status === 200) {
    // 解析后端返回的JSON數(shù)據(jù)(若返回非JSON則直接用xhr.responseText)
    const responseData = JSON.parse(xhr.responseText);
    console.log('請求成功,返回數(shù)據(jù):', responseData);
    // 后續(xù)業(yè)務(wù)邏輯:如渲染頁面數(shù)據(jù)
  } else if (xhr.readyState === 4) {
    // 請求完成但響應(yīng)失?。ㄈ?04、500錯誤)
    console.error('請求失敗,狀態(tài)碼:', xhr.status);
  }
};

// 5. 發(fā)送請求(POST請求需傳參,如xhr.send(JSON.stringify({id: 1})))
xhr.send();

// 6. 處理網(wǎng)絡(luò)錯誤
xhr.onerror = function() {
  console.error('網(wǎng)絡(luò)錯誤,請求無法發(fā)送');
};

3. 優(yōu)缺點

  • 優(yōu)點:原生 API,無依賴;兼容性好,支持老舊瀏覽器(如 IE6+)。

  • 缺點:代碼繁瑣,需手動處理請求狀態(tài)、錯誤和數(shù)據(jù)解析;不支持 Promise,無法使用 async/await 簡化異步代碼。

jQuery Ajax

Query 是早期前端開發(fā)中常用的 JavaScript 庫,它對 XMLHttpRequest 進行了封裝,提供了簡潔的 Ajax 方法,大幅減少了代碼量,讓 API 調(diào)用更高效。

1. 核心原理

基于 XMLHttpRequest 封裝,通過統(tǒng)一的.ajax()方法整合請求配置,內(nèi)置了數(shù)據(jù)解析、錯誤處理等邏輯,同時提供.ajax()方法整合請求配置,內(nèi)置了數(shù)據(jù)解析、錯誤處理等邏輯,同時提供.ajax()方法整合請求配置,內(nèi)置了數(shù)據(jù)解析、錯誤處理等邏輯,同時提供.get()、$.post()等簡化方法,降低開發(fā)成本。

2. 實現(xiàn)步驟與代碼示例

jquary調(diào)用ajax方法:

? 格式:$.ajax({});

? 參數(shù):

? type:請求方式GET/POST

? url:請求地址

? async:是否異步,默認是true表示異步

? data:發(fā)送到服務(wù)器的數(shù)據(jù)

? dataType:預(yù)期服務(wù)器返回的數(shù)據(jù)類型

? contentType:設(shè)置請求頭

? error:請求失敗時調(diào)用此函數(shù)

get請求

<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
$.ajax({
  url: 'https://api.example.com/user/add', // 請求URL
  type: 'POST', // 請求方法(GET/POST/PUT/DELETE等)
  contentType: 'application/json', // 發(fā)送數(shù)據(jù)的格式
  data: JSON.stringify({ // 發(fā)送給后端的數(shù)據(jù)
    name: '張三',
    age: 25
  }),
  dataType: 'json', // 預(yù)期后端返回的數(shù)據(jù)格式(自動解析)
  success: function(response) { // 請求成功回調(diào)
    console.log('添加用戶成功:', response);
  },
  error: function(xhr, status, error) { // 請求失敗回調(diào)
    console.error('添加用戶失敗:', status, error);
  },
  complete: function() { // 請求完成(無論成功/失?。┗卣{(diào)
    console.log('請求結(jié)束');
  }
});

(2)簡化方法:.get()與.get()與.get().post()

適用于簡單的 GET/POST 請求,無需復(fù)雜配置:

$.get();
	語法:
    $.get("請求地址","請求參數(shù)",function(形參){
        
    });
$.post();
	語法:
    $.post("請求地址","請求參數(shù)",function(形參){
        
    });
// GET請求:獲取用戶列表
$.get('https://api.example.com/user/list', { page: 1, size: 10 }, function(response) {
  console.log('用戶列表:', response);
}, 'json').fail(function(error) {
  console.error('獲取失?。?, error);
});

// POST請求:添加用戶
$.post('https://api.example.com/user/add', { name: '李四', age: 30 }, function(response) {
  console.log('添加成功:', response);
}, 'json').fail(function(error) {
  console.error('添加失敗:', error);
});

3. 優(yōu)缺點

  • 優(yōu)點:代碼簡潔,封裝完善;內(nèi)置錯誤處理和數(shù)據(jù)解析;支持鏈式調(diào)用。

  • 缺點:需引入 jQuery 庫,增加頁面加載體積;現(xiàn)代單頁應(yīng)用(如 Vue、React 項目)中,通常不依賴 jQuery,易造成冗余。

axios fetch

隨著前端技術(shù)的發(fā)展,Promise 成為異步編程的標準,axios 和 fetch 應(yīng)運而生。它們基于 Promise,支持 async/await 語法,更符合現(xiàn)代前端開發(fā)習(xí)慣,是 Vue、React、Angular 等框架項目的首選。

1. axios:功能強大的 Promise 庫

axios 是一個基于 Promise 的 HTTP 客戶端,支持瀏覽器和 Node.js 環(huán)境,提供了攔截請求 / 響應(yīng)、取消請求、自動轉(zhuǎn)換 JSON 數(shù)據(jù)等豐富功能。

(1)使用步驟

首先需安裝 axios(npm/yarn)或通過 CDN 引入:

# npm安裝
npm install axios
# 或CDN引入
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
// 1. 基礎(chǔ)GET請求(帶參數(shù))
axios.get('https://api.example.com/user/list', {
  params: { page: 1, size: 10 } // 自動拼接為URL參數(shù)
})
.then(function(response) {
  console.log('請求成功:', response.data); // response.data直接是解析后的JSON
})
.catch(function(error) {
  // 統(tǒng)一處理錯誤(包括網(wǎng)絡(luò)錯誤、404、500等)
  if (error.response) {
    // 有響應(yīng)但狀態(tài)碼錯誤
    console.error('響應(yīng)錯誤,狀態(tài)碼:', error.response.status);
    console.error('錯誤數(shù)據(jù):', error.response.data);
  } else if (error.request) {
    // 無響應(yīng)(網(wǎng)絡(luò)錯誤)
    console.error('網(wǎng)絡(luò)錯誤,無響應(yīng):', error.request);
  } else {
    // 請求配置錯誤
    console.error('請求配置錯誤:', error.message);
  }
});

// 2. 基礎(chǔ)POST請求(傳JSON數(shù)據(jù))
axios.post('https://api.example.com/user/add', {
  name: '王五',
  age: 28
}, {
  headers: { 'Content-Type': 'application/json' } // 可選,默認已支持JSON
})
.then(response => {
  console.log('添加成功:', response.data);
})
.catch(error => {
  console.error('添加失?。?, error);
});

// 3. 結(jié)合async/await(更簡潔的異步寫法)
async function getUserList() {
  try {
    const response = await axios.get('https://api.example.com/user/list', {
      params: { page: 1, size: 10 }
    });
    console.log('用戶列表:', response.data);
    return response.data;
  } catch (error) {
    console.error('獲取失?。?, error);
    throw error; // 拋出錯誤供上層處理
  }
}
// 調(diào)用函數(shù)
getUserList();

// 4. 高級功能:請求攔截器(添加Token等)
axios.interceptors.request.use(
  config => {
    // 給所有請求添加Token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

2. fetch調(diào)用API接口使用方法

fetch 是 ES6 引入的瀏覽器原生 API,基于 Promise,無需依賴第三方庫,設(shè)計更簡潔,是現(xiàn)代瀏覽器的原生選擇。但需注意其部分 “特殊行為”(如不默認攔截 HTTP 錯誤狀態(tài)碼)。

// 1. 基礎(chǔ)GET請求
fetch('https://api.example.com/user/list?page=1&size=10')
.then(function(response) {
  // 注意:fetch僅在網(wǎng)絡(luò)錯誤時 reject,404、500等狀態(tài)碼仍會 resolve
  if (!response.ok) {
    // 手動處理HTTP錯誤
    throw new Error(`請求失敗,狀態(tài)碼:${response.status}`);
  }
  // 解析響應(yīng)數(shù)據(jù)(支持json()、text()、blob()等)
  return response.json();
})
.then(function(data) {
  console.log('用戶列表:', data);
})
.catch(function(error) {
  console.error('請求錯誤:', error.message);
});

// 2. 基礎(chǔ)POST請求(傳JSON數(shù)據(jù))
fetch('https://api.example.com/user/add', {
  method: 'POST', // 請求方法
  headers: {
    'Content-Type': 'application/json' // 數(shù)據(jù)格式
  },
  body: JSON.stringify({ name: '趙六', age: 32 }), // 發(fā)送的數(shù)據(jù)(需轉(zhuǎn)為字符串)
  credentials: 'include' // 跨域時攜帶Cookie(可選)
})
.then(response => {
  if (!response.ok) {
    throw new Error(`狀態(tài)碼錯誤:${response.status}`);
  }
  return response.json();
})
.then(data => {
  console.log('添加成功:', data);
})
.catch(error => {
  console.error('添加失?。?, error);
});

// 3. 結(jié)合async/await
async function addUser() {
  try {
    const response = await fetch('https://api.example.com/user/add', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: '孫七', age: 26 })
    });
    if (!response.ok) {
      throw new Error(`請求失敗:${response.status}`);
    }
    const data = await response.json();
    console.log('添加成功:', data);
    return data;
  } catch (error) {
    console.error('錯誤:', error);
    throw error;
  }
}
// 調(diào)用函數(shù)
addUser();

fetch 的 “特殊注意點”

  • 不默認攔截 HTTP 錯誤:即使狀態(tài)碼為 404、500,fetch 仍會進入then回調(diào),需通過response.ok(true表示 200-299 狀態(tài)碼)手動判斷。

  • 不自動攜帶 Cookie:跨域請求時需添加credentials: 'include’配置,同域請求需添加credentials: ‘same-origin’。

無內(nèi)置超時處理:需手動通過Promise.race()實現(xiàn)超時控制。

3. axios 與 fetch 的優(yōu)缺點對比

特性axiosfetch依賴需安裝第三方庫瀏覽器原生,無依賴HTTP 錯誤處理自動攔截(404、500 等會 reject)需手動通過 response.ok 判斷數(shù)據(jù)解析自動解析 JSON 數(shù)據(jù)需手動調(diào)用 response.json ()超時控制內(nèi)置 timeout 配置需手動實現(xiàn)攔截器支持請求 / 響應(yīng)攔截器需手動封裝兼容性支持 IE8+(需配合 es6-promise)僅支持現(xiàn)代瀏覽器(IE 不支持)

總結(jié)與選擇建議

三種前端 JS 調(diào)用后端 API 的方法各有優(yōu)劣,選擇時需結(jié)合項目場景、瀏覽器兼容性要求和開發(fā)效率:

  • 若需兼容老舊瀏覽器(如 IE6+),或項目無第三方庫依賴,XMLHttpRequest是唯一選擇;

  • 若項目已引入 jQuery,或需快速實現(xiàn)簡單 API 調(diào)用,jQuery Ajax能簡化代碼;

  • 若為現(xiàn)代單頁應(yīng)用(Vue/React/Angular),或需豐富功能(如攔截器、超時控制),axios是最優(yōu)解;

  • 若項目追求 “零依賴” 且僅支持現(xiàn)代瀏覽器,fetch可作為輕量選擇(需處理其特殊行為)。

前端技術(shù)不斷迭代,但 API 調(diào)用的核心邏輯始終是 “發(fā)送請求 - 處理響應(yīng) - 處理錯誤”。掌握這三種方法,能讓你在不同項目中靈活應(yīng)對前后端交互需求。你在實際開發(fā)中更傾向于使用哪種方法?歡迎在評論區(qū)分享你的經(jīng)驗!

相關(guān)文章

最新評論

江源县| 天镇县| 广昌县| 莱芜市| 衡南县| 琼海市| 湖北省| 望城县| 横峰县| 昌乐县| 杭州市| 馆陶县| 措勤县| 蓬溪县| 濉溪县| 青河县| 新田县| 鹤山市| 苏尼特右旗| 平顶山市| 沂源县| 龙游县| 卓尼县| 泰顺县| 论坛| 鸡东县| 苍溪县| 赞皇县| 上林县| 柯坪县| 方城县| 宿迁市| 铜鼓县| 廉江市| 黄平县| 托克逊县| 贡山| 盱眙县| 洪泽县| 遂平县| 公安县|