zlx362211854 / daily-study

每日一个知识点总结,以issue的形式体现
10 stars 6 forks source link

70.Fetch 与 Ajax 的对比 #111

Open nanslee opened 5 years ago

goldEli commented 5 years ago
nanslee commented 5 years ago

导读

XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise,generator/yield,async/await 友好,而 Fetch API 是基于 Promise 设计,对于 IE8+ 以上浏览器,生产环境使用 Fetch 也是可行的。

// Ajax 
const xhr = new XMLHttpRequest();
xhr.open('get', url);     // post 则需在 send 前设置请求头
xhr.send(null);
xhr.onreadystatechange = () => {
  if(xhr.status === 200 && xhr.readyState === 4) {
    // ...
  }
}

// Fetch
fetch(url).then(response => {
  return response.json();
}).then(data => {
  console.log(data);
}).catch(e => {
  console.log("Oops, error");
});

重点

以上都讲述了 Fetch 相较 Ajax 的优势,那么劣势呢?