此功能以前是使用XMLHttpRequest 实现的。
Fetch 提供了更理想的替代方案,可以很容易地被其他技术使用,
例如Service Workers(en-US)。 Fetch 还提供了专用的逻辑空间来定义其他与HTTP 相关的概念。
例如CORS 和HTTP 扩展。
简单总结一下,它和axios类似,使用Promise语法。
但浏览器原生支持,无需下载第三方文件。
3. 基础语法 get请求
3.1 简要demo
让registerFn=()={
fetch(`/getData?name=${userName.value}password=${password.value}`).then(res={
返回res.json()
}).then(res={
console.log("得到结果:", res)
}).catch(错误={
console.log("错误:",错误)
})
}
3.2 简要分析
默认是使用2 个参数请求fetch()。
参数1: 服务器地址
参数2: 可选配置参数
HTTP请求的方法、头部和数据体都在这个对象中设置。 3. fetch()采用模块化设计,API分散在多个对象(Response对象、Request对象、Headers对象)
4.fetch()使用Promise,不使用回调函数,因此大大简化了写法,更加简洁。
5.response是一个Stream对象
3. 配置参数
HTTP请求的方法、头部、数据体都在这个对象中设置。
{
body: JSON.stringify(data), //必须匹配"Content-Type"
cache: "no-cache", //是否缓存,可能的值,no-cache,重新加载,force-cache,only-if-cached
凭证: "同源", //包含, 同源, *省略
标题: {
"user-agent": "Mozilla/4.0 MDN 示例",
"内容类型": "应用程序/json"
},
method: "POST", //*GET、POST、PUT、DELETE 等
mode: "cors", //无cors, cors, *同源
redirect: "follow", //手动, *follow, 错误
referrer: "无引荐", //*客户端, 无引荐
}
3.1 credentials
包含浏览器发送cookie(即使是跨域来源)
仅当同源和脚本同源时才会发送cookie。
省略不使用cookie
3.2 第一个then
一般情况下,第一个then用于格式化数据。
例如: res.json()
4. post请求 常用配置
服务器是使用节点在本地编写的
下面是如何写帖子
让loginFn=异步()={
让数据={
name: "yzs",
密码:"123456"
}
尝试{
让res=等待fetch("/登录", {
method: "POST",
body:JSON.stringify(数据)
}).then(res=res.json())
console.log("发布结果:", res)
} 捕获(错误){
//在fetch 中捕获
console.log("error:", 错误)
}
}
5. post 单文件上传
let upload=async()={
let file=document.querySelector("input[type=file]").files[0];
//表单数据对象
让formatData=new FormData()
//第一个键文件信息
//第二个值是对应的值文件
//将上传的内容添加到表单数据对象中
formatData.append("fileInfo", 文件)
尝试{
让res=等待fetch("/myupload", {
method: "POST",
body:格式数据
}).then(res=res.json())
showImg.src=res.path
console.log("成功:", res);
} 捕获(错误){
console.log("错误", 错误)
}
6. post 多文件上传配置
var formData=new FormData();
var photos=document.querySelector("input[type="file"][multiple]");
formData.append("title", "我的维加斯假期");
//formData 只接受文件、blob 或字符串。数组不能直接传递,所以必须嵌入循环中
for (让i=0; i photos.files.length; i++) {
formData.append("照片", photos.files[i]);
}
7. 重点 post 请求头配置
帖子的正文数据必须与content-type匹配,否则请求将不会成功。
7.1 json数据配置
const 响应=await fetch("/login", {
method: "POST",
body: JSON.stringify({ name: "yzs 尹", 密码:"123456" }),
标题: {
"内容类型": "application/json;charset=utf-8"
}
})
7.2 key-value配置
const response=wait fetch("/list", {
method: "POST",
标题: {
"内容类型":"application/x-www-form-urlencoded;字符集=UTF-8",
},
body: "名称=yzs密码=123456"
})
7.3 表单配置
const form=document.querySelector("form");
const 响应=等待fetch("/提交", {
method: "POST",
body: 新的FormData(表单)
})
7.4 上传配置
const input=document.querySelector("input[type="file"]");
常量数据=新FormData();
data.append("文件", input.files[0]);
//追加附加数据
data.append("name", "yzs");
fetch("/上传", {
method: "POST",
body:数据
});上传必须通过表单,所以和表单提交几乎一样。
7.4 二进制数据
转换某些图像时将使用二进制上传。
让blob=等待新的Promise(resolve=canvasElem.toBlob(resolve, "image/png")
);
让响应=等待获取("/用户/头像",{
method: "POST",
body:datacanvasElem 使用canvas的toBlob函数
您还可以使用画布的toDataURL
好了,文章到这里就结束啦,如果本次分享的高效数据抓取与获取策略揭秘和问题对您有所帮助,还望关注下本站哦!
【高效数据抓取与获取策略揭秘】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
用fetch 做请求真的方便啊!
有16位网友表示赞同!
学习一下 fetch 的用法,感觉比 XMLHttpRequest 简洁很多。
有14位网友表示赞同!
想做个 API 接口,看资料说 fetch 用起来比较好。
有9位网友表示赞同!
什么样的网站都需要用到 fetch 啊?
有17位网友表示赞同!
fetch 比较新吗?我好像还是用的老的 XMLHttpRequest。
有5位网友表示赞同!
是不是用 fetch 可以处理异步请求啊?
有6位网友表示赞同!
前端开发必备吧,要学一学。
有19位网友表示赞同!
学一下 fetch 的用法,然后把我的项目改造下试试!
有11位网友表示赞同!
有什么好的 fetch 学习资源推荐吗?
有9位网友表示赞同!
fetch 能获取不同类型的文件吗?
有18位网友表示赞同!
感觉 fetch 比 XMLHttpRequest 更人性化吧。
有20位网友表示赞同!
可以用 fetch 做跨域请求吗?
有5位网友表示赞同!
想了解一下 fetch 在 Node.js 中的使用。
有14位网友表示赞同!
fetch 是浏览器提供的接口吗?
有15位网友表示赞同!
用 fetch 实现的请求有什么优缺点呢?
有9位网友表示赞同!
我在使用 fetch 的时候遇到了问题,不知道怎么解决.
有18位网友表示赞同!
有人能分享一下常用的 fetch 技巧吗?
有13位网友表示赞同!
是不是用 fetch 最好?还是其他方法更合适?
有20位网友表示赞同!
学了 fetch 后,会让前端开发更方便吗?
有8位网友表示赞同!
用 fetch 做数据请求,安全性怎么样呢?
有13位网友表示赞同!