摘要:前言既然是的新方法肯定就有一些比較的瀏覽器不支持了對于那些不支持此方法的瀏覽器就需要額外的添加一個鏈接用法抓取這里返回的是一個對象不支持的瀏覽器需要相應(yīng)的或通過等轉(zhuǎn)碼器轉(zhuǎn)碼后在執(zhí)行這里是請求的請求體這里獲取選擇的文件內(nèi)容注意事項和的
1. 前言
既然是h5的新方法,肯定就有一些比較older的瀏覽器不支持了,對于那些不支持此方法的 瀏覽器就需要額外的添加一個polyfill: [鏈接]: https://github.com/fis-components/whatwg-fetch2. 用法
ferch(抓取) :
HTML:
fetch("/users.html") //這里返回的是一個Promise對象,不支持的瀏覽器需要相應(yīng)的ployfill或通過babel等轉(zhuǎn)碼器轉(zhuǎn)碼后在執(zhí)行 .then(function(response) { return response.text()}) .then(function(body) { document.body.innerHTML = body })
JSON :
fetch("/users.json") .then(function(response) { return response.json()}) .then(function(json) { console.log("parsed json", json)}) .catch(function(ex) { console.log("parsing failed", ex) })
Response metadata :
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) })
Post form:
var form = document.querySelector("form") fetch("/users", { method: "POST", body: new FormData(form) })
Post JSON:
fetch("/users", { method: "POST", headers: { "Accept": "application/json", "Content-Type": "application/json" }, body: JSON.stringify({ //這里是post請求的請求體 name: "Hubot", login: "hubot", }) })
File upload:
var input = document.querySelector("input[type="file"]") var data = new FormData() data.append("file", input.files[0]) //這里獲取選擇的文件內(nèi)容 data.append("user", "hubot") fetch("/avatars", { method: "POST", body: data })3. 注意事項
(1)和ajax的不同點: 1. fatch方法抓取數(shù)據(jù)時不會拋出錯誤即使是404或500錯誤,除非是網(wǎng)絡(luò)錯誤或者請求 過程中被打斷.但當(dāng)然有解決方法啦,下面是demonstration:
function checkStatus(response) { if (response.status >= 200 && response.status < 300) { //判斷響應(yīng)的狀態(tài)碼是否正常 return response //正常返回原響應(yīng)對象 } else { var error = new Error(response.statusText) //不正常則拋出一個響應(yīng)錯誤狀態(tài)信息 error.response = response throw error } } function parseJSON(response) { return response.json() } fetch("/users") .then(checkStatus) .then(parseJSON) .then(function(data) { console.log("request succeeded with JSON response", data) }).catch(function(error) { console.log("request failed", error) })
2.一個很關(guān)鍵的問題,fetch方法不會發(fā)送cookie,這對于需要保持客戶端和服務(wù)器端 常連接就很致命了,因為服務(wù)器端需要通過cookie來識別某一個session來達到保持會 話狀態(tài).要想發(fā)送cookie需要修改一下信息:
fetch("/users", { credentials: "same-origin" //同域下發(fā)送cookie })
fetch("https://segmentfault.com", { credentials: "include" //跨域下發(fā)送cookie })
下圖是跨域訪問segment的結(jié)果
如果不出意外的話,請求的url和響應(yīng)的url是相同的,但是如果像redirect這種操作的 話response.url可能就會不一樣.在XHR時,redirect后的response.url可能就不太準 確了,需要設(shè)置下:response.headers["X-Request-URL"] = request.url 適用于( Firefox < 32, Chrome < 37, Safari, or IE.)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89724.html
摘要:即將立秋的課多周刊第期我們的微信公眾號,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。課多周刊機器人運營中心是如何玩轉(zhuǎn)起來的分享課多周刊是如何運營并堅持下來的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號:fed-talk,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大...
摘要:即將立秋的課多周刊第期我們的微信公眾號,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。課多周刊機器人運營中心是如何玩轉(zhuǎn)起來的分享課多周刊是如何運營并堅持下來的。 即將立秋的《課多周刊》(第2期) 我們的微信公眾號:fed-talk,更多精彩內(nèi)容皆在微信公眾號,歡迎關(guān)注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大...
摘要:如果這個模塊的時候沒有設(shè)置,就表示是個匿名模塊,那怎么才能與之前發(fā)起請求的那個相匹配呢這里就有了一個全局變量,先將元數(shù)據(jù)放入這個對象。模塊加載完畢的回調(diào)保存元數(shù)據(jù)到匿名模塊,為請求的不管是不是匿名模塊,最后都是通過方法,將元數(shù)據(jù)存入到中。 近幾年前端工程化越來越完善,打包工具也已經(jīng)是前端標配了,像seajs這種老古董早已停止維護,而且使用的人估計也幾個了。但這并不能阻止好奇的我,為了了...
閱讀 2784·2021-11-23 09:51
閱讀 3539·2021-10-08 10:17
閱讀 1273·2021-10-08 10:05
閱讀 1327·2021-09-28 09:36
閱讀 1846·2021-09-13 10:30
閱讀 2186·2021-08-17 10:12
閱讀 1682·2019-08-30 15:54
閱讀 2011·2019-08-30 15:53