少妇无码太爽了在线播放_久久久综合香蕉尹人综合网_日日碰狠狠添天天爽五月婷_国产欧美精品一区二区三区四区

人(ren)參的(de)用量

axios傳遞參數傳不過去,小程序post傳參,聊聊axios-axios的介紹以及請求方式

一開始學習(xi)axios時(shi),與后(hou)端(duan)交互用(yong)的是從網(wang)上down下(xia)來封裝好的axios,直接(jie)使用(yong)也并未發現什么問(wen)題。直到有一天自行寫(xie)項目(mu)時(shi),自己封裝了get和post請求,post沒(mei)有問(wen)題,但get請求,后(hou)端(duan)表(biao)示(shi)收不到數據(ju)。那時(shi)的我(wo)一直不明白(bai)個(ge)所以(yi)然,一直認(ren)為(wei)一定是后(hou)端(duan)出(chu)了問(wen)題。后(hou)來查(cha)了很多資料,才(cai)解開這個(ge)謎(mi)團(tuan)。所以(yi)今(jin)天把(ba)axios容(rong)易犯錯的地方寫(xie)下(xia)來,給初學axios的小伙伴(ban)們(men)提個(ge)醒。以(yi)下(xia)部分內容(rong)面試時(shi)可(ke)能(neng)會用(yong)到。

axios的介紹(shao)

axios是通(tong)過Promise實(shi)現對ajax技術的(de)一種封裝,就像(xiang)jquery對ajax的(de)封裝一樣。axios是基于Promise的,因(yin)此可(ke)以使用Promise API。


axios的請求方法(fa)

axios里請求(qiu)參數類型會涉(she)及到兩種,一種是params,一種是data,他們兩個的區別如下:

params 是將與請(qing)求一起發(fa)送的 URL 參數,對應后(hou)端(duan)的query,一般用于get請(qing)求

data 是作為請(qing)求主(zhu)體被發送的數(shu)據(ju),對應后端的body,一般用于post請(qing)求

請求方法(fa):

  • get

  • post

  • put

  • patch

  • delete

  • head

為了方(fang)便起見(jian),axios為所有支(zhi)持的請求方(fang)法提供了別名:

1.axios.get(url[, config])

獲取數據,請求指定的信息,返回(hui)實體對象

只支持 params 傳參

2.axios.post(url[, data[, config]])

向指定資源提交數據(例如表單提交或文件上傳)

同時(shi)支持(chi) data 和 params

3.axios.put(url[, data[, config]])

更新數據,從客戶(hu)端向服務器傳送的(de)數據取代指定(ding)的(de)文檔(dang)的(de)內容

所(suo)有(you)數據推送(song)到(dao)后端

同時(shi)支持 data 和 params

4.axios.patch(url[, data[, config]])

更新數據,是對put方法的補充,用來對已知資源進(jin)行局部(bu)更新

只將更改(gai)的數據(ju)推(tui)送到后端

同時支(zhi)持 data 和 params

5.axios.delete(url[, config])

請求(qiu)服(fu)務(wu)器刪除指定的(de)數據(ju)

只(zhi)支持 params傳參

6.axios.head(url[, config])

獲取報文首(shou)部

只支持 params傳參

我們在開發的時(shi)候,最常(chang)用(yong)的是axios.get和axios.post。通常(chang)我們也只(zhi)有(you)將這兩種(zhong)請(qing)求方式進行(xing)封裝。所以接下來著重介(jie)紹這兩種(zhong)請(qing)求方式。


axios中get和(he)post傳(chuan)參的優缺點:

1.post更安全(quan)

  • get參數會拼接在url里(li),成為(wei)url里(li)的一部分,安全性(xing)較差;而post的請求數據是放在body中;

  • get會(hui)被緩存(cun),保存(cun)在服務器(qi)日志以(yi)及瀏(liu)覽器(qi)的瀏(liu)覽記(ji)錄中,而post沒有緩存(cun)。

2.post發送的數據量(liang)更大

  • get請(qing)求有長(chang)度限(xian)制,一般(ban)是2k,post則(ze)沒有長(chang)度限(xian)制。

3.post能發送更多的數(shu)據類型

  • get只能(neng)發送ASCII字符(fu),而post能(neng)發送更(geng)多的數據類型

4.post比get慢

  • 一(yi)般情況下是(shi)由于get的緩存(cun)機制導致;

  • get是向(xiang)服務器(qi)索取數據(ju),post則是向(xiang)服務器(qi)提交數據(ju);

  • post會比get多(duo)請求一次。

5.post請求(qiu)包含更多的請求(qiu)頭

  • get 請求(qiu)是將header、data、http打包(bao)成TCP包(bao)發送(song)給(gei)服(fu)務端;post請求(qiu)會產生兩(liang)個(ge)(ge)TCP包(bao),一(yi)個(ge)(ge)用(yong)來存放header信息 一(yi)個(ge)(ge)用(yong)來存放data信息,請求(qiu)時先(xian)給(gei)瀏覽(lan)器發送(song)header包(bao),服(fu)務器響(xiang)應后再發送(song)data包(bao),服(fu)務器響(xiang)應后再返回數據(ju)。

  • 這也是(shi)造成post比get慢(man)的一個原因(yin);

  • 另外(wai)post請求(qiu)因為沒(mei)有長度限制,所以請求(qiu)求(qiu)里可以包含更多的數據。

6.get請(qing)求(qiu)在(zai)瀏覽器(qi)回退時(shi)是無(wu)害的,無(wu)影響(xiang);post請(qing)求(qiu)在(zai)瀏覽器(qi)回退時(shi)則會再次提交(jiao)請(qing)求(qiu)。

最后附上axios的配置項及詳解(jie):

{  // `url` 是用于請求的服務器 URL  url: '/user',  // `method` 是創建請求時使用的方法  method: 'get', // 默認是 get  // `baseURL` 將自動加在 `url` 前面,除非 `url` 是一個絕對 URL。  // 它可以通過設置一個 `baseURL` 便于為 axios 實例的方法傳遞相對 URL  baseURL: '//some-domain.com/api/',  // `transformRequest` 允許在向服務器發送前,修改請求數據  // 只能用在 'PUT', 'POST' 和 'PATCH' 這幾個請求方法  // 后面數組中的函數必須返回一個字符串,或 ArrayBuffer,或 Stream  transformRequest: [function (data) {    // 對 data 進行任意轉換處理    return data;
  }],  // `transformResponse` 在傳遞給 then/catch 前,允許修改響應數據  transformResponse: [function (data) {    // 對 data 進行任意轉換處理    return data;
  }],  // `headers` 是即將被發送的自定義請求頭  headers: {'X-Requested-With': 'XMLHttpRequest'},  // `params` 是即將與請求一起發送的 URL 參數  // 必須是一個無格式對象(plain object)或 URLSearchParams 對象  params: {    ID: 12345
  },  // `paramsSerializer` 是一個負責 `params` 序列化的函數  // (e.g. //www.npmjs.com/package/qs, //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  // - 瀏覽器專屬:FormData, File, Blob  // - Node 專屬: Stream  data: {    firstName: 'Fred'
  },  // `timeout` 指定請求超時的毫秒數(0 表示無超時時間)  // 如果請求話費了超過 `timeout` 的時間,請求將被中斷  timeout: 1000,  // `withCredentials` 表示跨域請求時是否需要使用憑證  // 打一個比方如果在跨域請求的時候,如果我們需要向后臺發送cookie的情況下,這個時候我們需要將這個字段設置成true  withCredentials: false, // 默認的  // `adapter` 允許自定義處理請求,以使測試更輕松  // 返回一個 promise 并應用一個有效的響應 (查閱 [response docs](#response-api)).  adapter: function (config) {    /* ... */
  },  // `auth` 表示應該使用 HTTP 基礎驗證,并提供憑據  // 這將設置一個 `Authorization` 頭,覆寫掉現有的任意使用 `headers` 設置的自定義 `Authorization`頭  auth: {    username: 'janedoe',    password: 's00pers3cret'
  },  // `responseType` 表示服務器響應的數據類型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'  responseType: 'json', // 默認的  // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名稱  xsrfCookieName: 'XSRF-TOKEN', // default  // `xsrfHeaderName` 是承載 xsrf token 的值的 HTTP 頭的名稱  xsrfHeaderName: 'X-XSRF-TOKEN', // 默認的  // `onUploadProgress` 允許為上傳處理進度事件  onUploadProgress: function (progressEvent) {    // 對原生進度事件的處理
  },  // `onDownloadProgress` 允許為下載處理進度事件  onDownloadProgress: function (progressEvent) {    // 對原生進度事件的處理
  },  // `maxContentLength` 定義允許的響應內容的最大尺寸  maxContentLength: 2000,  // `validateStatus` 定義對于給定的HTTP 響應狀態碼是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者設置為 `null` 或 `undefined`),promise 將被 resolve; 否則,promise 將被 rejecte  validateStatus: function (status) {    return status >= 200 && status < 300; // 默認的
  },  // `maxRedirects` 定義在 node.js 中 follow 的最大重定向數目  // 如果設置為0,將不會 follow 任何重定向  maxRedirects: 5, // 默認的  // `httpAgent` 和 `httpsAgent` 分別在 node.js 中用于定義在執行 http 和 https 時使用的自定義代理。允許像這樣配置選項:  // `keepAlive` 默認沒有啟用  httpAgent: new http.Agent({ keepAlive: true }),  httpsAgent: new https.Agent({ keepAlive: true }),  // 'proxy' 定義代理服務器的主機名稱和端口  // `auth` 表示 HTTP 基礎驗證應當用于連接代理,并提供憑據  // 這將會設置一個 `Proxy-Authorization` 頭,覆寫掉已有的通過使用 `header` 設置的自定義 `Proxy-Authorization` 頭。  proxy: {    host: '127.0.0.1',    port: 9000,    auth: : {      username: 'mikeymike',      password: 'rapunz3l'
    }
  },  // `cancelToken` 指定用于取消請求的 cancel token  // (查看后面的 Cancellation 這節了解更多)  cancelToken: new CancelToken(function (cancel) {
  })
}

聯系我們(men)

聯系我們

在線咨詢:

郵(you)件:@QQ.COM

工作時間:周(zhou)一至周(zhou)五,8:30-21:30,節(jie)假日不(bu)休(xiu)

關(guan)注微信
關注微信
返回頂(ding)部