Fetch

578 字
3 分钟
Fetch

fetch 是一种 HTTP 数据请求的方式,是 XMLHttpRequest 的一种替代方案。fetch 不是 ajax 的进一步封装,而是原生 js。Fetch 函数就是原生 js,没有使用 XMLHttpRequest 对象

Fetch 的参数#

  • url ,该参数定义要获取的资源,可以是一个 url 字符串,也可以是一个 Request 对象
  • options ,该参数可选,为一个对象,内部含有一些对请求的设置属性
    • method<请求使用的方法>。如、POST 等
    • headers<请求头信息>。形式为 Headers 对象或 ByteString
    • body<请求的> body 信息,可能是一个 Blob、BufferSource、FormData、URLSearchParams 或者 USVString 对象。注意 GET 或 HEAD 方法的请求不能包含 body 信息
    • mode<请求的模式>。如 cors、no-cors 或者 same-origin
    • credentiala<请求的> credentials。如 omit、same-origin 或者 include
    • cache<请求的> cache 模式,no-store,reload,no-cache 或者 only-if-cached

response 对象#

response 为一个 Promise 对象成功时传回的对象,该属性含有对应返回数据的属性和方法

属性#

  • status (number),HTTP 请求结果参数,在 100-599 范围
  • statusText (string),服务器返回的状态报告
  • ok (boolean),如果返回 200 表示请求成功则为 true
  • headers (Headers),返回头部信息,该属性后面也有对应的方法
  • has(name) (boolean),判断是否存在该信息头
  • get(name) (string),获取信息头的数据
  • getAll(name) (Array),获取所有头部数据
  • set(name,value),设置请求头信息
  • append(name,value),添加 header 的内容
  • delete(name),删除 header 的信息
  • forEach(function(value,name){...},[thisContext]),循环读取 header 的信息
  • url (string),详细的地址

方法#

  • text(),以 string 的形式生成请求 text
  • json(),生成 JSON.parse(responseText)的结果
  • blob(),生成一个 Blob
  • arrayBuffer(),生成一个 ArrayBuffer
  • formData(),生成格式化数据,可用于其它的请求

其他方法#

  • clone(),创建一个 Response 对象的克隆
  • Response.error(),返回一个绑定了网络错误的新的 Response 对象
  • Response.redirect(),用另一个 URL 创建一个新的 Resonse 对象

用法#

get#

fetch("a.html")
.then(function (response) {
return response.text()
})
.then(function (response) {
document.body.innerHTML = response
})

post#

fetch("a.html", {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json";
},
body: JSON.stringify({
user: "zhangsan",
pwd: 123456;
})
})

与原生 Ajax 的比较#

原生 Ajax#

var Ajax = new XMLHttpRequest()
Ajax.open("GET", url)
Ajax.responseType = "json"
Ajax.send()
Ajax.onreadystatechange = function () {
console.log(Ajax.response)
}
Ajax.onerror = function () {
console.log("error")
}

fetch#

fetch(url).then(function (response) {
return response.json() //相当于JSON.parse(response);
}).then(function (data) {
console.log(data)
}).catch(function (err) {
console.log("error", err)
});
//使用箭头函数
fetch(url).then(
response => response.json()
).then(
data => console.log(data)
).catch(
err => console.log("error", err)
);
//使用async函数
let Fetch = async function () {
try {
let response = await fetch(url)
let data = await response.json()
console.log(data)
} catch (err) {
console.log("error", err)
}
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Fetch
https://sukksa.github.io/posts/fetch/
作者
Sukksa
发布于
2021-11-25
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
Ajax跨域
Ajax同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。 所…
2
Axios
Ajax1. REST API: restful (Representational State Transfer (资源)表现层状态转化) 1. 发送请求进行CRUD 哪个操作由请求方式来决定 2. 同一个请求路径可以进行多个操作 3. 请求方式会用到GET/POST/PUT/DELETE 2. 非RES…
3
原生Ajax
AjaxAjax 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),既是一个对象,也是一种方法模式 AJAX 是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网…
4
react-hooks
reactReact 的核心是组件。v16.8 版本之前,组件的标准写法是类(class)。 任何一个组件,可以用类来写,也可以用钩子来写。下面是类的写法。 再来看钩子的写法,也就是函数。 官方推荐使用钩子(函数),而不是类。因为钩子更简洁,代码量少,用起来比较"轻",而类比较"重"。而且,钩子是函数,更符合…
5
关于 cesium 在 micro-app 下无法显示的问题
cesium基座:vite + vue3 子应用:vite + vue3 micro app v1.0.0 rc.29, cesium v1.135 子应用包含一个 cesium map,在基座打开子应用时,cesium 无法显示地图,但是 sence, sky box, model 都能正常显示,唯独地图不显…
随机文章随机推荐
Profile Image of the Author
Sukksa
记录前端学习与日常
公告
博客刚刚上线,内容还在慢慢补齐。欢迎随便逛逛~
分类
标签
最新动态
站点统计
文章
69
分类
16
标签
17
总字数
178,517
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录