Fetch API简单学习

跨网络异步获取资源的功能以前是使用XMLHttpRequest对象实现的,Fetch API提供了更好的替代方案,可以很容易的被其他技术使用(如Servise Workers)

Fetch API提供了一个全局的fetch()方法,这个方法提供了一种简单的、合乎逻辑的方式来跨网络异步获取资源。fetch()方法接收两个参数:第一个参数表示要获取的资源路径;第二个参数表示请求的配置项(可选)。该方法会返回一个Promise

当fetch请求接收到一个代表错误的状态码时(如404、500),返回的Promise不会被标记为reject,而是被标记为resolve,但是会将response的ok属性设置为false。只有当网络错误或请求被阻止时才会被标记为reject状态

默认情况下, fetch 不会从服务端发送或接收任何 cookies,要发送 cookies,必须设置 credentials 选项

注意: IE浏览器不支持

fetch请求

请求一张图片,图片请求成功后插入到img标签中

<img id="t">
  <script>
    var img = document.getElementById('t');
    fetch('https://www.86886.wang/public/picture/1520049901259.jpg').then(function(res){
      console.log(res)
      if(res.ok) {
        return res.blob();
      }
    }).then(function(u) {
      var url = URL.createObjectURL(u);
      img.src = url;
    })
  </script>

自定义第二个参数

GET 请求

fetch('https://www.86886.wang/api/articles/1/3', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  },
  cache: 'default',
  mode: 'cors',
}).then(function(res){
  if(res.ok) {
    return res.json();
  }
}).then(function(data) {
  console.log(data)
})

POST请求

fetch('https://www.86886.wang/api/article', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    token: 'asdf'
  },
  body: JSON.stringify({
   title: 'fetch API学习',
   content: '文章内容'
  })
}).then(function(res){
  if(res.ok) {
    return res.json();
  }
}).then(function(data) {
  console.log(data)
})

检测成功

成功的状态只有一种,即response.ok属性为true。失败的情况有很多种,如404、500、网络中断

fetch('https://www.86886.wang/public/picture/152004990125.jpg').then(function(res){
  if(res.ok) {
    return res.blob();
  }else {
    console.log('服务器响应出错了'); // 资源404、服务器500等
  }
}).catch(function(err){
  console.log('Network response was not ok.'); // 网络出错
})

posted @ 2018-09-06 19:13:32 浏览(272) JavaScript笔记

avatar