最全的axios攻略
axios 是一個基於Promise 用於瀏覽器和nodejs 的HTTP 用戶端,本文就和大家分享最全的axios攻略,隨著vuejs 作者尤雨溪發布消息,不再繼續維護vue-resource,並推薦大家使用axios 開始,axios 被越來越多的人所了解。本來想在網路上找詳細攻略,突然發現,axios 的官方文件本身就非常詳細!所以推薦大家學習這種函式庫,最好詳細閱讀其官方文件。大概翻譯了一下 axios 的官方文檔,相信大家只要吃透本文再加以實踐,axios 就是小意思啦! !
axios 簡介
axios 是基於Promise 用於瀏覽器和nodejs 的HTTP 用戶端,它本身俱有以下特徵:
從瀏覽器建立XMLHttpRequest
從node.js 發出http 請求
支援Promise API
#攔截請求和回應
轉換請求和回應資料
#取消請求
自動轉換JSON資料
用戶端支援防止 CSRF/XSRF
瀏覽器相容性
引入方式:
$ npm install axios $ cnpm install axios //taobao源 $ bower install axios 或者使用cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
舉例:
執行GET 請求
// 向具有指定ID的用户发出请求 axios.get('/user?ID=12345') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); // 也可以通过 params 对象传递参数 axios.get('/user', { params: { ID: 12345 } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
執行POST 請求
axios.post('/user', { firstName: 'Fred', lastName: 'Flintstone' }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
function getUserAccount() { return axios.get('/user/12345'); } function getUserPermissions() { return axios.get('/user/12345/permissions'); } axios.all([getUserAccount(), getUserPermissions()]) .then(axios.spread(function (acct, perms) { //两个请求现已完成 }));
執行多個並發請求
axios API
可以透過將相關配置傳遞給axios 來進行請求。
axios(config)
// 发送一个 POST 请求 axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } });
// 发送一个 GET 请求 (GET请求是默认请求模式) axios('/user/12345');
axios(url[, config])
請求方法別名
為了方便起見,已經為所有支援的請求方法提供了別名。
axios.request(config)
axios.get(url [,config])
axios.delete(url [,config])
axios.head(url [,config])
axios.post( url [,data [,config]])
axios.put(url [,data [,config]])
- ##axios. patch(url [,data [,config]])
使用別名方法時,不需要在config中指定url,method和data屬性。
- axios.all(iterable)
- axios.spread(callback)
var instance = axios.create({ baseURL: 'https://some-domain.com/api/', timeout: 1000, headers: {'X-Custom-Header': 'foobar'} });
可用的實例方法如下所示。 指定的配置將與實例配置合併。 實例方法
axios#request(config)axios#get(url [,config])
axios#delete(url [,config])
axios #head(url [,config])
axios#post(url [,data [,config]])
axios#put(url [,data [,config]])
axios#patch( url [,data [,config]])
這些是用於發出請求的可用設定選項。 只有url是必需的。 如果未指定方法,請求將預設為GET。
{ // `url`是将用于请求的服务器URL url: '/user', // `method`是发出请求时使用的请求方法 method: 'get', // 默认 // `baseURL`将被添加到`url`前面,除非`url`是绝对的。 // 可以方便地为 axios 的实例设置`baseURL`,以便将相对 URL 传递给该实例的方法。 baseURL: 'https://some-domain.com/api/', // `transformRequest`允许在请求数据发送到服务器之前对其进行更改 // 这只适用于请求方法'PUT','POST'和'PATCH' // 数组中的最后一个函数必须返回一个字符串,一个 ArrayBuffer或一个 Stream transformRequest: [function (data) { // 做任何你想要的数据转换 return data; }], // `transformResponse`允许在 then / catch之前对响应数据进行更改 transformResponse: [function (data) { // Do whatever you want to transform the data return data; }], // `headers`是要发送的自定义 headers headers: {'X-Requested-With': 'XMLHttpRequest'}, // `params`是要与请求一起发送的URL参数 // 必须是纯对象或URLSearchParams对象 params: { ID: 12345 }, // `paramsSerializer`是一个可选的函数,负责序列化`params` // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) paramsSerializer: function(params) { return Qs.stringify(params, {arrayFormat: 'brackets'}) }, // `data`是要作为请求主体发送的数据 // 仅适用于请求方法“PUT”,“POST”和“PATCH” // 当没有设置`transformRequest`时,必须是以下类型之一: // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams // - Browser only: FormData, File, Blob // - Node only: Stream data: { firstName: 'Fred' }, // `timeout`指定请求超时之前的毫秒数。 // 如果请求的时间超过'timeout',请求将被中止。 timeout: 1000, // `withCredentials`指示是否跨站点访问控制请求 // should be made using credentials withCredentials: false, // default // `adapter'允许自定义处理请求,这使得测试更容易。 // 返回一个promise并提供一个有效的响应(参见[response docs](#response-api)) adapter: function (config) { /* ... */ }, // `auth'表示应该使用 HTTP 基本认证,并提供凭据。 // 这将设置一个`Authorization'头,覆盖任何现有的`Authorization'自定义头,使用`headers`设置。 auth: { username: 'janedoe', password: 's00pers3cret' }, // “responseType”表示服务器将响应的数据类型 // 包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: 'json', // default //`xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称 xsrfCookieName: 'XSRF-TOKEN', // default // `xsrfHeaderName`是携带xsrf令牌值的http头的名称 xsrfHeaderName: 'X-XSRF-TOKEN', // default // `onUploadProgress`允许处理上传的进度事件 onUploadProgress: function (progressEvent) { // 使用本地 progress 事件做任何你想要做的 }, // `onDownloadProgress`允许处理下载的进度事件 onDownloadProgress: function (progressEvent) { // Do whatever you want with the native progress event }, // `maxContentLength`定义允许的http响应内容的最大大小 maxContentLength: 2000, // `validateStatus`定义是否解析或拒绝给定的promise // HTTP响应状态码。如果`validateStatus`返回`true`(或被设置为`null` promise将被解析;否则,promise将被 // 拒绝。 validateStatus: function (status) { return status >= 200 && status < 300; // default }, // `maxRedirects`定义在node.js中要遵循的重定向的最大数量。 // 如果设置为0,则不会遵循重定向。 maxRedirects: 5, // 默认 // `httpAgent`和`httpsAgent`用于定义在node.js中分别执行http和https请求时使用的自定义代理。 // 允许配置类似`keepAlive`的选项, // 默认情况下不启用。 httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), // 'proxy'定义代理服务器的主机名和端口 // `auth`表示HTTP Basic auth应该用于连接到代理,并提供credentials。 // 这将设置一个`Proxy-Authorization` header,覆盖任何使用`headers`设置的现有的`Proxy-Authorization` 自定义 headers。 proxy: { host: '127.0.0.1', port: 9000, auth: : { username: 'mikeymike', password: 'rapunz3l' } }, // “cancelToken”指定可用于取消请求的取消令牌 // (see Cancellation section below for details) cancelToken: new CancelToken(function (cancel) { }) }
axios.get('/user/12345') .then(function(response) { console.log(response.data); console.log(response.status); console.log(response.statusText); console.log(response.headers); console.log(response.config); });
您可以指定將套用於每個請求的設定預設值。 全域axios預設值
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
登入後複製//在创建实例时设置配置默认值
var instance = axios.create({
baseURL:'https://api.example.com'
});
//在实例创建后改变默认值
instance.defaults.headers.common ['Authorization'] = AUTH_TOKEN;
登入後複製
自訂實例預設值axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
//在创建实例时设置配置默认值 var instance = axios.create({ baseURL:'https://api.example.com' }); //在实例创建后改变默认值 instance.defaults.headers.common ['Authorization'] = AUTH_TOKEN;
//使用库提供的配置默认值创建实例 //此时,超时配置值为`0`,这是库的默认值 var instance = axios.create(); //覆盖库的超时默认值 //现在所有请求将在超时前等待2.5秒 instance.defaults.timeout = 2500; //覆盖此请求的超时,因为它知道需要很长时间 instance.get('/ longRequest',{ timeout:5000 });
攔截器
你可以截取請求或回應在被then 或catch 處理之前//添加请求拦截器 axios.interceptors.request.use(function(config){ //在发送请求之前做某事 return config; },function(error){ //请求错误时做些事 return Promise.reject(error); }); //添加响应拦截器 axios.interceptors.response.use(function(response){ //对响应数据做些事 return response; },function(error){ //请求错误时做些事 return Promise.reject(error); });
var myInterceptor = axios.interceptors.request.use(function () {/*...*/}); axios.interceptors.request.eject(myInterceptor);
var instance = axios.create(); instance.interceptors.request.use(function () {/*...*/});
處理錯誤
axios.get('/ user / 12345')
.catch(function(error){
if(error.response){
//请求已发出,但服务器使用状态代码进行响应
//落在2xx的范围之外
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else {
//在设置触发错误的请求时发生了错误
console.log('Error',error.message);
}}
console.log(error.config);
});
登入後複製axios.get('/ user / 12345',{
validateStatus:function(status){
return status < 500; //仅当状态代码大于或等于500时拒绝
}}
})
登入後複製
消除您可以使用validateStatus配置選項定義自訂HTTP狀態碼錯誤範圍。 axios.get('/ user / 12345') .catch(function(error){ if(error.response){ //请求已发出,但服务器使用状态代码进行响应 //落在2xx的范围之外 console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else { //在设置触发错误的请求时发生了错误 console.log('Error',error.message); }} console.log(error.config); });
axios.get('/ user / 12345',{ validateStatus:function(status){ return status < 500; //仅当状态代码大于或等于500时拒绝 }} })
您可以使用取消令牌取消請求。
axios cancel token API基於可取消的promise提議,目前處於階段1。您可以使用CancelToken.source工廠建立一個取消令牌,如下所示:
var CancelToken = axios.CancelToken; var source = CancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function(thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { // 处理错误 } }); //取消请求(消息参数是可选的) source.cancel('操作被用户取消。');
var CancelToken = axios.CancelToken; var cancel; axios.get('/ user / 12345',{ cancelToken:new CancelToken(function executor(c){ //一个执行器函数接收一个取消函数作为参数 cancel = c; }) }); // 取消请求 clear();
注意:您可以使用相同的取消令牌取消幾個請求。
您也可以透過將執行器函數傳遞給CancelToken建構子來建立取消令牌:
浏览器
在浏览器中,您可以使用URLSearchParams API,如下所示:
var params = new URLSearchParams(); params.append('param1', 'value1'); params.append('param2', 'value2'); axios.post('/foo', params);
或者,您可以使用qs库对数据进行编码:请注意,所有浏览器都不支持URLSearchParams,但是有一个polyfill可用(确保polyfill全局环境)。
var qs = require('qs'); axios.post('/foo', qs.stringify({ 'bar': 123 });
在node.js中,可以使用querystring模块,如下所示:Node.js
var querystring = require('querystring'); axios.post('http://something.com/', querystring.stringify({ foo: 'bar' });
Promise你也可以使用qs库。
axios 依赖本机要支持ES6 Promise实现。 如果您的环境不支持ES6 Promises,您可以使用polyfill。
TypeScript
axios包括TypeScript定义。
import axios from 'axios'; axios.get('/user?ID=12345');
axios在很大程度上受到Angular提供的$http服务的启发。 最终,axios努力提供一个在Angular外使用的独立的$http-like服务。
学完本文相信大家对axios更加深入了解了吧,赶紧收藏起来吧。
相关推荐:
以上是最全的axios攻略的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

崩壞星穹鐵道黃泉遺器怎麼選擇?全新五星級角色黃泉正式登場,不少玩家已經抽到了她,這名角色定位為主C輸出,下面小編帶來黃泉遺器套裝及詞條推薦,希望對各位小伙伴們有所幫助。 1.套裝推薦選擇【死水深潛的先驅】四件套,位面飾品推薦選擇【出雲顯世與高天神國】或【停轉的薩爾索圖】。 2.詞條主詞條選取為:軀幹暴擊率/爆擊傷害,腳部攻擊/速度,位面球雷傷/攻擊,連結繩攻擊力。副詞條選取為:優先找雙暴,滿足門檻或盡量高即可,隨後堆疊速度與攻擊力。 3.注意①外圈四件套,死水為最優,雷套在有雷球與速度鞋的情況下與死水

oppo手機密碼忘了怎麼破?解鎖攻略大揭密!在日常生活中,手機已經成為人們生活中不可或缺的一部分,它不僅是通訊工具,也是社交娛樂的平台。然而,隨著手機功能的不斷升級,為了保護使用者的隱私安全,手機鎖定螢幕密碼的設定也變得越來越重要。但是,難免會有人忘記手機密碼的情況發生。當用戶忘記oppo手機密碼時,該如何破解?本文將為您揭秘oppo手機密碼解鎖的方法。首先

崩壞星穹鐵道天斬無斬是黃泉的專屬成就,很多玩家不知道天斬無斬成就怎麼獲得,其實非常簡單,先用符玄把兩側怪物吸引到一起,接著再次傳送回剛剛的傳送點再用黃泉去戰鬥,具體內容一起來看看這篇崩壞星穹鐵道天斬無斬成就獲取攻略。崩壞星穹鐵道攻略大全崩壞星穹鐵道天斬無斬成就攻略1、傳送下圖位置。 2.先用符玄把兩側怪物吸引在一起。 3.之後傳送回去剛剛的傳送點,沒戰績點的可以補一下。 4.之後使用黃泉五連砍就能獲得成就了。

上賽季的千手柱間[和服]展現了他強而有力的忍術“仙法·明神門”,讓各位見識到了他內心熾熱的“火之意志”。本季的忍界遠徵主題是「毒霧沁香」!本次遠徵令狀忍者香燐[「曉」袍]是漩渦一族的一員,她擁有強大的查克拉和出色的感知能力,傷者能透過咬她的皮膚來恢復查克拉和傷勢!作為“鷹”小隊最後一位出場的成員,這次她帶著“磐岩”、“暴烈”兩套全新飾品來到了我們身邊,就讓我們一起來看看新賽季的忍界遠徵路線思路與深度解析吧!溫馨提示:1、本賽季的忍界遠徵將於2024年6月13日5點結束,遠徵排行榜於2024年6

在最新航海王熱血航線任務中有一個恐怖奇談墓地驚魂的探索任務,航海王熱血航線恐怖奇談墓地驚魂怎麼做呢?很多玩家不知道怎麼玩,下面小編就來介紹,一起來看看吧!航海王熱血航線恐怖奇談墓地驚魂怎麼做1、在恐怖之船的外邊找到靈異新聞記者,他們指引我們進墓地。 2.來到墓地會觸發劇情,然後開始戰鬥。 3.戰鬥勝利找記者對話,就可以完成任務了。

崩壞星穹鐵道雙重賠償怎麼做?雙重賠償是主線任務【鴿群中的貓】其中一環,該任務中能夠獲得《偷盲注》隱藏成就,下面小編帶來崩壞星穹鐵道雙重賠償任務詳解,希望對玩家們有所幫助。 1.來到新地圖【朝露公館】,從前面門進去2.從上圖門進來後,將下圖位置4個雕像正確旋轉後,隱藏的正確門就會出現,然後繼續任務走追踪任務先去1和2任務點對話,然後切換到3個位置時,可先消耗消耗品,將砂金的終結技充滿能量後再進入戰鬥。進入戰鬥後,直接搶先釋放砂金的終結技即可,如果能一次獲得7點【盲注】,即可獲得隱藏成就《偷盲注》;注意

天鵝絨裡的惡魔是這個版本推出的全新的任務,很多的玩家都非常的好奇這個任務要怎麼樣才能夠完成,小編今天就為大家帶來了這個任務的圖文的任務攻略,玩家可以通過這篇攻略來完成任務中的解謎,更加快速的完成任務,詳細的內容可以在這篇天鵝絨裡的惡魔圖文任務攻略中了解,一起來看看吧。崩壞星穹鐵道天鵝絨裡的惡魔攻略1、首先需要玩家等級達到34級,並且完成前置任務【是誰殺死了...】,就可以自動接取這個任務。 2、前往匹諾康尼的鉑金套房和砂金以及黑天鵝對話。 3.隨後跟著黑天鵝移動,前往夢境中的黃金的時刻。 4.來到鐘錶

無名之輩是一款武俠養成遊戲,玩家將扮演不同的角色,從初出茅廬的菜鳥到名震江湖的大俠,在闖蕩武俠世界的過程中我們也會遇到各種各樣的問題,小編已經將方法步驟總結到這篇無名之輩全攻略匯總,幫助大家解決遇到的困難。無名之輩攻略大全無名之輩攻略大全兌換碼俠客選哪個奇珍怎麼升級無名之輩兌換碼一、兌換碼一覽1、dl6662、dl7773、dl8884、vip6665、vip7776、vip8887、dl8884、vip6665、vip7776、vip8887、dl8884、vip6665、vip7776、vip8887、dl8884、vip6665、vip7776、vip8887、dl8884、vip6665、vip7776 、svip77712、svip88813、無名之輩
