fetch的简单入门

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

初识fetch

现在获取后台数据的时候,既有jq封装的ajax,也有axios等等,也有原生的XMLHttpRequest,但是今天没有介绍这些,而是介绍另外一个api,fetch

fetch,说白了,就是XMLHttpRequest的一种替代方案。如果有人问你,除了XMLHttpRequest获取后台数据之外,还有没有其他的替代原生api?

这是你就可以回答,还可以使用一种解决方案–fetch

fetch用法

fetch可以在现代浏览器中使用,已经挂载到BOM上面,可以直接在谷歌控制台使用,fetch返回的是一个Promise
查看fetch的支持情况:fetch的支持情况

当然,如果不支持fetch也没有问题,可以使用第三方的ployfill来实现:fetch-ployfill

简单使用

// 通过fetch获取
// 
fetch('https://www.xxx.com/search') // 返回一个Promise对象
  .then((res) => {
    console.log(res.text())  // res.text() 是promise对象
  }).then((res) => {
    console.log(res)
  })
复制代码

fetch API

fetch(url[, option])

  • url:

必填,定义要获取的资源。这可能是:
一个 url 字符串,包含要获取资源的 URL
一个 Request 对象

  • option

可选
一个配置项对象,包括所有对请求的设置。可选的参数有:

method: 请求使用的方法,如 GET、POST等。
headers: 请求的头信息。 形式为 Headers 的对象。
body: 请求的 body 信息:可能是一个 Blob、BufferSource、FormDataURLSearchParams 或者 USVString 对象。注意 GET 或 HEAD 方法的请求不能包含 body 信息。
mode: 请求的模式,如 cors、 no-cors 或者 same-origin。
credentials: 请求的 credentials,如 omit、same-origin 或者 include。为了在当前域名内自动发送 cookie , 必须提供这个选项,
cache: 请求的cache模式: default 、 no-store 、 reload 、 no-cache 、 * force-cache 或者 only-if-cached 。
redirect: 可用的 redirect 模式: follow (自动重定向), error (如果产生重定向将自动终止并且抛出一个错误), 或者 manual (手动处理重定向). 在Chrome中,Chrome 47之前的默认值是 follow,从 Chrome 47开始是 manual。

例子

get请求直接携带在url中类似于

// 通过fetch获取
fetch('https://www.xxx.com/search/?a=1&b=2', { // 在URL中写上传递的参数
    method: 'GET'
  })
  .then((res)=>{
    return res.text()
  })
  .then((res)=>{
    console.log(res)
  })
复制代码

post请求则在option.body中设置, 类似于

// 第一种
var url = 'https://xxxx.com/profile';
var data = {username: 'xxx'};

fetch(url, {
  method: 'POST', // or 'PUT'
  body: JSON.stringify(data), // data can be `string` or {object}!
  headers: new Headers({
    'Content-Type': 'application/json'
  })
}).then(res => res.json())
.catch(error => console.error('Error:', error))
.then(response => console.log('Success:', response))


// 第二种
fetch('https://www.xxx.com/search', {
    method: 'POST',
    body: new URLSearchParams([["foo", 1],["bar", 2]]).toString() // 这里是请求对象
  })
  .then((res)=>{
    return res.text()
  })
  .then((res)=>{
    console.log(res)
  })
复制代码

总结

fetch本身返回是promise,结合async,await使用起来还是挺舒服的,大家可以体验一下,童叟无欺。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享