亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue項目中使用fetch的實現方法

2019-11-19 11:42:07
字體:
來源:轉載
供稿:網友

fetch的由來和定義

fetch的由來     

眾所周知,傳統 Ajax (指 XMLHttpRequest)是最早出現的發送異步請求技術,其核心是使用XMLHttpRequest對象。但是它也存在一些令人頭疼的問題:XHR 是一個設計粗糙的 API,不符合關注分離的原則;配置和調用方式非常混亂,而且基于事件的異步模型寫起來也沒有現代的 Promise,generator/yield,async/await 友好。而Fetch 的出現就是為了解決 XHR 存在的問題。

fetch的定義和使用

MDN中的描述:  

Fetch API 提供了一個獲取資源的接口(包括跨域請求)。任何使用過 XMLHttpRequest 的人都能輕松上手,但新的API提供了更強大和靈活的功能集。but 因為凄慘的兼容性,讓這個東東用起來比較困難。那我可以自己封裝一下,對于不支持fetch的瀏覽器便使用ajax 代替(見下文)。      

Fetch 的核心在于對 HTTP 接口的抽象,包括 Request,ResponseHeaders,Body,以及用于初始化異步請求的 global fetch。其中,global fetch方法的語法定義:

fetch(input[, init]); 

input:定義要獲取的資源??梢允且粋€資源的 URL 字符串,也可以是一個 Request 對象。
init:可選,一個配置項對象,包括所有對請求的設置。包括:method,headers,body,mode,credentials等返回值:Promise     

切記一點:Fetch是基于promise設計的,它不是ajax的進一步封裝,而是原生js API,沒有使用XMLHttpRequest對象。

fetch的優點和缺點

優點:

1. 語法簡潔,更加語義化
2. 基于標準 Promise 實現,支持 async/await
3. 同構方便,更加底層,提供的API豐富(request, response, body , headers)5. 脫離了XHR,是ES規范里新的實現方式

缺點:

1. fetch只對網絡請求報錯,對400,500都當做成功的請求,服務器返回 400,500 錯誤碼時并不會 reject。
2. fetch默認不會帶cookie,需要添加配置項: credentials: 'include'。
3. fetch不支持abort,不支持超時控制,造成了流量的浪費。
4. fetch沒有辦法原生監測請求的進度,而XHR可以

補充知識點:

Fetch的mode配置項有3個取值:   

same-origin:該模式是不允許跨域的,它需要遵守同源策略;   

cors: 該模式支持跨域請求,顧名思義它是以CORS的形式跨域;

no-cors: 該模式用于跨域請求但是服務器不帶CORS響應頭,也就是服務端不支持CORS;目前,針對跨域請求,cors模式是常見的實現。

vue項目中完美封裝fetch

話不多少,直接附上代碼。

env.js文件,如下:

/** * baseUrl: 域名地址 * routerMode: 路由模式*/let baseUrl = '';let routerMode = 'history';if (process.env.NODE_ENV == 'development') {   baseUrl = 'http://localhost:3000';}else{   baseUrl = 'http://xxxx這里是線上地址xxx';}export { baseUrl, routerMode }

fetch.js文件,如下:

import { baseUrl } from './env'export default async(url = '', data = {}, type = 'GET', method = 'fetch') => { type = type.toUpperCase(); url = baseUrl + url;    // 此處規定get請求的參數使用時放在data中,如同post請求 if (type == 'GET') { let dataStr = '';  Object.keys(data).forEach(key => {  dataStr += key + '=' + data[key] + '&'; })  if (dataStr !== '') {  dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));  url = url + '?' + dataStr; } }    // 對于支持fetch方法的瀏覽器,處理如下: if (window.fetch && method == 'fetch') { let requestConfig = {            // fetch默認不會帶cookie,需要添加配置項credentials允許攜帶cookie  credentials: 'include',   method: type,  headers: {  'Accept': 'application/json',  'Content-Type': 'application/json'  },  mode: "cors", // 以CORS的形式跨域  cache: "force-cache" }  if (type == 'POST') {  Object.defineProperty(requestConfig, 'body', {  value: JSON.stringify(data)  }) }  try {  const response = await fetch(url, requestConfig);  const responseJson = await response.json();  return responseJson } catch (error) {  throw new Error(error) } } else { // 對于不支持fetch的瀏覽器,便自動使用 ajax + promise return new Promise((resolve, reject) => {  let requestObj;  if (window.XMLHttpRequest) {  requestObj = new XMLHttpRequest();  } else {  requestObj = new ActiveXObject; // 兼容IE  }   let sendData = '';  if (type == 'POST') {  sendData = JSON.stringify(data);  }   requestObj.open(type, url, true);  requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  requestObj.send(sendData);   requestObj.onreadystatechange = () => {  if (requestObj.readyState == 4) {   if (requestObj.status == 200) {   let obj = requestObj.response   if (typeof obj !== 'object') {    obj = JSON.parse(obj);   }   resolve(obj)   } else {   reject(requestObj)   }  }  } }) }}

以上代碼,親測有效。Over, thanks !希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看免费| 亚洲最新av网址| 国产成人精品最新| 欧美怡春院一区二区三区| 国产精品福利在线| 日韩综合视频在线观看| 欧美日韩免费在线观看| 91国语精品自产拍在线观看性色| www.亚洲天堂| 国产精品美女久久久久久免费| www.日本久久久久com.| 在线性视频日韩欧美| 亚洲美女av网站| 91精品中文在线| 日韩av在线影视| 欧美一级免费看| 亚洲第一精品久久忘忧草社区| 日本高清视频一区| 91精品久久久久久久久青青| 国产精品夜间视频香蕉| 国产精品爽爽爽爽爽爽在线观看| 一区二区三区精品99久久| 亚洲男人av电影| 中文字幕日韩欧美在线| 精品国产欧美一区二区三区成人| 日韩中文视频免费在线观看| 国产精品a久久久久久| 日韩有码片在线观看| 久久国产精彩视频| 在线观看日韩av| 亚洲国产小视频| 九九九久久久久久| 日韩av片电影专区| 亚洲美女av在线| 怡红院精品视频| 亚洲成人精品久久| 中文字幕在线日韩| 91九色视频在线| 精品国内亚洲在观看18黄| 成人做爰www免费看视频网站| 97精品视频在线观看| 久久69精品久久久久久久电影好| 92看片淫黄大片看国产片| 国产精品日日摸夜夜添夜夜av| 91久久久久久| 一区二区三区四区视频| 久久精品精品电影网| 亚洲视频自拍偷拍| 欧美日韩999| 亚洲第一av网站| 欧美久久精品一级黑人c片| xxx欧美精品| 国产手机视频精品| 亚洲tv在线观看| 亚洲国产成人精品久久| 91久久精品久久国产性色也91| 欧美性生活大片免费观看网址| 91精品国产自产在线老师啪| 丝袜美腿亚洲一区二区| 亚洲裸体xxxx| 国产精品a久久久久久| 色综合亚洲精品激情狠狠| 国产精品久久久久久久美男| 一区二区三区 在线观看视| 国产精品电影一区| 国产一区二区三区高清在线观看| 亚洲成人三级在线| 国产精品久久久久91| 中文字幕在线看视频国产欧美| 97视频在线观看播放| 亚洲国产第一页| 欧美性受xxxx白人性爽| 久久精品成人欧美大片古装| 日韩一区二区三区xxxx| 日本韩国在线不卡| 国产女同一区二区| 欧美午夜性色大片在线观看| 日韩中文字幕免费看| 国产在线精品一区免费香蕉| 亚洲v日韩v综合v精品v| 亚洲人成网7777777国产| 国产免费久久av| 国产成人在线亚洲欧美| 欧美精品成人在线| 97香蕉超级碰碰久久免费的优势| 色播久久人人爽人人爽人人片视av| 69av在线播放| 啪一啪鲁一鲁2019在线视频| 日韩美女免费视频| 成人有码在线播放| 狠狠色狠狠色综合日日小说| 午夜精品蜜臀一区二区三区免费| 亚洲精品久久久久国产| 欧美一级在线亚洲天堂| 国产精品视频午夜| 欧美国产日韩一区二区| 欧美激情网站在线观看| 欧美黑人一级爽快片淫片高清| 亚洲国产欧美自拍| 欧洲美女7788成人免费视频| 日韩经典第一页| 高潮白浆女日韩av免费看| 一夜七次郎国产精品亚洲| 国产精品久久久久久五月尺| 欧美电影免费观看电视剧大全| 欧美亚洲午夜视频在线观看| 国产噜噜噜噜噜久久久久久久久| 在线日韩精品视频| 一区二区av在线| 亚洲毛茸茸少妇高潮呻吟| 欧美在线中文字幕| 国产一区玩具在线观看| 亚洲精品一区二区久| 久久99热这里只有精品国产| 国产精品永久免费| 欧美日韩国产成人在线观看| 久久精品99无色码中文字幕| 日韩av免费在线播放| 亚洲在线一区二区| 国产成人亚洲综合青青| 欧美成在线观看| 国产成人精品电影| 国产一区二区丝袜| 国产精品亚洲网站| 亚洲精品一区二三区不卡| 成人激情视频在线播放| 欧美日韩亚洲激情| 日本精品视频在线| 亚洲二区中文字幕| 日韩最新av在线| 亚洲欧美国产日韩中文字幕| 欧美成人午夜影院| 欧美成年人网站| 欧美性69xxxx肥| 精品人伦一区二区三区蜜桃网站| 97视频免费在线看| 亚洲bt天天射| www.欧美三级电影.com| 国产精品你懂得| 免费成人高清视频| 中文字幕日韩免费视频| 97婷婷大伊香蕉精品视频| 最好看的2019年中文视频| 欧美午夜精品久久久久久人妖| 亚洲精品欧美极品| 亚洲欧美制服第一页| 高清亚洲成在人网站天堂| 精品亚洲va在线va天堂资源站| 亚洲欧美在线免费观看| 亚洲欧洲日韩国产| 日韩欧美国产一区二区| 国产视频精品久久久| 久久精品国产亚洲精品2020| 久久精品视频99| 亚州av一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 超碰91人人草人人干| 少妇av一区二区三区| 91九色视频在线| 欧美在线不卡区| 欧美日韩国产精品一区二区不卡中文| 国产视频丨精品|在线观看| 日韩视频免费中文字幕| 国产xxx69麻豆国语对白|