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

首頁 > 編程 > JavaScript > 正文

你不需要jQuery(三) 新AJAX方法fetch()

2019-11-20 09:42:12
字體:
來源:轉載
供稿:網友

XMLHttpRequest來完成ajax有些老而過時了。

fetch()能讓我們完成類似 XMLHttpRequest (XHR) 提供的ajax功能。它們之間的主要區別是,Fetch API 使用了 Promises,它讓接口更簡單、簡潔,避免了回調的復雜性,省去了使用復雜的 XMLHttpRequest API。

如果你之前未使用過Promises,你應該先看看《JavaScript Promises 用法》這篇文章。

一、基本Fetch用法

讓我們先用一個例子來比較一下使用 XMLHttpRequest 和使用 fetch 之間的不同。我們要請求一個URL,獲取JSON格式的返回結果。

XMLHttpRequest
一個 XMLHttpRequest 請求需要兩個監聽器來捕捉 success 和 error 兩種情形,而且需要調用 open() 和 send() 方法。

function reqListener() {  var data = JSON.parse(this.responseText);  console.log(data); }function reqError(err) {  console.log('Fetch Error :-S', err); }var oReq = new XMLHttpRequest(); oReq.onload = reqListener; oReq.onerror = reqError; oReq.open('get', './api/some.json', true); oReq.send();

Fetch
我們的 fetch 請求的代碼基本上是這樣的:

fetch('./api/some.json')  .then(  function(response) {   if (response.status !== 200) {   console.log('Looks like there was a problem. Status Code: ' +    response.status);   return;   }  // Examine the text in the response   response.json().then(function(data) {   console.log(data);   });  }  )  .catch(function(err) {  console.log('Fetch Error :-S', err);  });

我們首先檢查請求響應的狀態是否是 200,然后才按照 JSON 對象分析響應數據。

fetch()請求獲取的內容是一個 Stream 對象。也就是說,當我們調用 json() 方法時,返回的仍是一個 Promise 對象,這是因為對 stream 的讀取也是異步的。

返回數據對象的元數據(Metadata)

在上面的例子中,我看到了服務器響應對象Response的基本狀態,以及如何轉換成JSON。返回的相應對象Response里還有很多的元數據信息,下面是一些:

fetch('users.json').then(function(response) {  console.log(response.headers.get('Content-Type'));  console.log(response.headers.get('Date')); console.log(response.status);  console.log(response.statusText);  console.log(response.type);  console.log(response.url); });

響應的對象Response類型

當我們執行一個fetch請求時,響應的數據的類型response.type可以是“basic”, “cors” 或 “opaque”。這些類型用來說明應該如何對待這些數據和數據的來源。

當請求發起自同一個域時,響應的類型將會是“basic”,這時,對響應內容的使用將沒有任何限制。

如果請求來自另外某個域,而且響應的具有CORs頭信息,那么,響應的類型將是“cors”。 “cors” 和 “basic” 類型的響應基本是一樣的,區別在于,“cors”類型的響應限制你只能看到的頭信息包括`Cache-Control`, `Content-Language`, `Content-Type`, `Expires`, `Last-Modified`, 和 `Pragma`。

“opaque”類型的響應說明請求來自另外一個域,并且不具有 CORS 頭信息。一個opaque類型的響應將無法被讀取,而且不能讀取到請求的狀態,無法看到請求的成功與否。當前的 fetch() 實現無法執行這樣的請求。

你可以給fetch請求指定一個模式,要求它只執行規定模式的請求。這個模式可以分為:

“same-origin” 只有來自同域的請求才能成功,其它的均將被拒絕。
“cors” 允許不同域的請求,但要求有正確的 CORs 頭信息。
“cors-with-forced-preflight” 在執行真正的調用前先執行preflight check。
“no-cors” 目前這種模式是無法執行的。
定義模式的方法是,使用一個參數對象當做fetch方法的第二個參數:

fetch('http://some-site.com/cors-enabled/some.json', {mode: 'cors'})  .then(function(response) {  return response.text();  })  .then(function(text) {  console.log('Request successful', text);  })  .catch(function(error) {  log('Request failed', error)  });

串聯 Promises

Promises最大的一個特征是,你可以串聯各種操作。對于fetch來說,我們可以在各個fetch操作里共享一些邏輯操作。

在使用JSON API時,我們需要檢查每次請求響應的狀態,然后解析成JSON對象。使用promise,我們可以簡單的將分析狀態和解析JSON的代碼放到一個單獨函數里,然后當做promise返回,這樣就是代碼更條理了。

function status(response) {  if (response.status >= 200 && response.status < 300) {  return Promise.resolve(response)  } else {  return Promise.reject(new Error(response.statusText))  } }function json(response) {  return response.json() }fetch('users.json')  .then(status)  .then(json)  .then(function(data) {  console.log('Request succeeded with JSON response', data);  }).catch(function(error) {  console.log('Request failed', error);  });

我們用 status 函數來檢查 response.status 并返回 Promise.resolve() 或 Promise.reject() 的結果,這個結果也是一個 Promise。我們的fetch() 調用鏈條中,首先如果fetch()執行結果是 resolve,那么,接著會調用 json() 方法,這個方法返回的也是一個 Promise,這樣我們就得到一個分析后的JSON對象。如果分析失敗,將會執行reject函數和catch語句。

你會發現,在fetch請求中,我們可以共享一些業務邏輯,使得代碼易于維護,可讀性、可測試性更高。

用fetch執行表單數據提交

在WEB應用中,提交表單是非常常見的操作,用fetch來提交表單數據也是非常簡潔。

fetch里提供了 method 和 body 參數選項。

fetch(url, {  method: 'post',  headers: {   "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"  },  body: 'foo=bar&lorem=ipsum'  }) .then(json)  .then(function (data) {  console.log('Request succeeded with JSON response', data);  })  .catch(function (error) {  console.log('Request failed', error);  });

在Fetch請求里發送用戶身份憑證信息

如果你想在fetch請求里附帶cookies之類的憑證信息,可以將 credentials 參數設置成 “include” 值。

fetch(url, {  credentials: 'include' })

顯而易見,fetch API相比起傳統的 XMLHttpRequest (XHR) 要簡單的多,相比起jQuery里提供ajax API也絲毫不遜色。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜色77av精品影院| 国产a级全部精品| 亚洲最大在线视频| 国产精品大陆在线观看| 亚洲女人被黑人巨大进入| 亚洲一级黄色片| 久久91精品国产91久久跳| 欧美一区第一页| 韩国福利视频一区| 爽爽爽爽爽爽爽成人免费观看| 国产精品久久久久91| 久久久精品亚洲| 成人中文字幕+乱码+中文字幕| 欧美www视频在线观看| 国产精品九九久久久久久久| 国产精品爽爽ⅴa在线观看| 国产成人小视频在线观看| 日韩免费高清在线观看| 国产做受高潮69| 亚洲自拍偷拍福利| 国产区精品在线观看| 国产精品入口福利| 国产午夜一区二区| 欧美在线www| 日韩免费视频在线观看| 国产精品最新在线观看| 国产成人一区二区在线| 国产精品美女免费| 青青久久av北条麻妃海外网| 欧美成人激情图片网| 富二代精品短视频| 色妞久久福利网| 国产在线视频欧美| 成人精品在线观看| 欧洲亚洲免费在线| 性色av一区二区三区红粉影视| 91九色在线视频| 日韩av免费看| 国产精品久久久亚洲| 久久综合国产精品台湾中文娱乐网| 国产一区二区三区四区福利| 国产精品久久久久久av| 亚洲自拍偷拍在线| 欧美国产精品日韩| 欧亚精品中文字幕| 在线成人免费网站| 国产精品永久在线| 亚洲视频综合网| 精品亚洲aⅴ在线观看| 欧美日韩国产成人在线| 成人妇女淫片aaaa视频| 国产精品一二三在线| 成人a级免费视频| 26uuu亚洲国产精品| 午夜精品一区二区三区在线| 国产精品色午夜在线观看| 欧美日韩激情小视频| 日韩最新中文字幕电影免费看| 91精品久久久久久久久久久久久久| 丝袜美腿精品国产二区| 欧美激情a在线| 亚洲国产精品99| 久久久综合免费视频| 久久国产精品视频| 九九九热精品免费视频观看网站| 国产精品男女猛烈高潮激情| xxxxxxxxx欧美| 国产精品国产三级国产专播精品人| 国内免费精品永久在线视频| 国产精品一区av| 最近的2019中文字幕免费一页| 国产午夜精品全部视频在线播放| 国产精品久久久久久久久久99| 欧美极品欧美精品欧美视频| 国产成+人+综合+亚洲欧洲| 免费av一区二区| 91高清免费在线观看| 成人免费自拍视频| 久久69精品久久久久久久电影好| 日韩在线视频网站| 日韩精品在线电影| zzjj国产精品一区二区| 欧美巨乳美女视频| 精品久久久91| 91精品国产色综合| 亚洲天堂男人天堂女人天堂| 亚洲精品视频网上网址在线观看| 在线精品国产成人综合| 中文字幕日韩在线视频| 亚洲一区二区久久久久久| 91精品国产91久久久久久吃药| 国产精品草莓在线免费观看| 欧美韩日一区二区| 国产日韩亚洲欧美| 欧美日韩国产中文精品字幕自在自线| 4p变态网欧美系列| 亚洲第一区第二区| 亚洲欧美国产va在线影院| 成人国产精品久久久久久亚洲| 欧美一区二三区| 国产91色在线|免| 亚洲第一二三四五区| 欧美肥老妇视频| 久久久女女女女999久久| 最新中文字幕亚洲| 美女999久久久精品视频| 久久久久亚洲精品| 日韩av电影手机在线| 欧美精品激情视频| 亚洲国产美女精品久久久久∴| 91亚洲国产成人久久精品网站| 欧美日韩国产成人| 欧美激情日韩图片| 欧美日韩亚洲一区二区三区| 欧美成人免费观看| 欧美精品在线极品| 国产精品久久久久久影视| 在线视频欧美日韩| 亚洲xxxx在线| 毛片精品免费在线观看| 色综合色综合久久综合频道88| 国产精品高潮呻吟久久av无限| 96国产粉嫩美女| 中文精品99久久国产香蕉| 美女黄色丝袜一区| 亚洲国产精品美女| 成人在线激情视频| 欧美久久精品午夜青青大伊人| 欧美日韩免费区域视频在线观看| 亚洲性猛交xxxxwww| 中文综合在线观看| 亚洲第一网站免费视频| 亚洲区在线播放| 亚洲欧美国产高清va在线播| 久久国产色av| 全亚洲最色的网站在线观看| 久久久国产精品x99av| 国产成人综合一区二区三区| 欧美成人午夜免费视在线看片| 97色伦亚洲国产| 欧美伦理91i| 国产精品ⅴa在线观看h| 91影视免费在线观看| 亚洲国产精品电影| 热久久这里只有| 亚洲欧美在线一区二区| 日韩成人av网址| 国产精品久久久久久婷婷天堂| 日韩在线视频免费观看| 国产亚洲精品综合一区91| 国产精品丝袜久久久久久不卡| 中文字幕欧美日韩va免费视频| 亚洲bt欧美bt日本bt| 欧美高清在线播放| 欧美精品九九久久| 免费成人高清视频| 亚洲国产成人久久综合一区| 91豆花精品一区| 不卡av在线网站| 欧美性猛交xxxx久久久| 精品国产91久久久久久老师| 亚洲最新av在线网站| 亚洲国产精品成人一区二区| 在线视频国产日韩|