Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题

XHR/Fetch 基础

bajiu
浏览器

2020-11-27 14:50:27

实现一个简单的网络请求

XMLHttpRequest

xhr = new XMLHttpRequest();
xhr.open('GET',  'data.txt',  true);
xhr.send();
xhr.onreadystatechange = function(){
  if(xhr.readyState == 4){
    if(xhr.status == 200){
      success(xhr.responseText);
    } else {
      if(failed){
         failed(xhr.status);
      }
    }
  }
}

fetch

Fetch 的核心是HTTP Request/Response/Header/Body 的接口,以及 fetch 方法

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

Fetch 与 XMLHttpRequest 的区别

XHR 基于事件机制实现请求成功与失败的回调,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱[1]。

Fetch 通过 Promise 来实现回调,调用更加友好。

  • 当接收到一个代表错误的 HTTP 状态码(404 或 500)时,从 fetch()返回的 Promise 不会被标记为 reject,相反标记了 resolve(但ok 属性设置为 false)。仅当网络故障时或请求被阻止时,才会标记为 reject。
  • 默认情况下,fetch 不会从服务端发送或接收任何 cookies, 若要发送 cookies,必须设置 credentials 属性。
上一篇

Electron 12+ 出现 require is not defined 报错解决

下一篇

webpack5模块联邦

©2024 By bajiu.