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