ajax、axios、fetch的区别

(1)AJAX即“AsynchronousJavascriptAndXML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。它是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。其缺点如下:

1,本身是针对MVC编程,不符合前端MVVM的浪潮

2,基于原生XHR开发,XHR本身的架构不清晰

3,不符合关注分离(Separation of Concerns)的原则

4,配置和调用方式非常混乱,而且基于事件的异步模型不友好。

(2)Fetch 号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多。fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。

fetch的优点:

1,语法简洁,更加语义化

2,基于标准 Promise 实现,支持 async/await

3,更加底层,提供的API丰富(request, response)

4,脱离了XHR,是ES规范里新的实现方式

fetch的缺点:

1,fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 2,reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。

3,fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: ‘include’})

4,fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费

5,fetch没有办法原生监测请求的进度,而XHR可以

Fetch封装

npm install whatwg-fetch --save  // 适配其他浏览器
npm install es6-promise

export const handleResponse = (response) => {
  if (response.status === 403 || response.status === 401) {
    const oauthurl = response.headers.get('locationUrl');
    if (!_.isEmpty(oauthUrl)) {
      window.location.href = oauthurl;
      return;
    }
  }
  if (!response.ok) {
    return getErrorMessage(response).then(errorMessage => apiError(response.status, errorMessage));
  }
  if (isJson(response)) {
    return response.json();
  }
  if (isText(response)) {
    return response.text();
  }

  return response.blob();
};

const httpRequest = {
  request: ({
    method, headers, body, path, query,
  }) => {
    const options = {};
    let url = path;
    if (method) {
      options.method = method;
    }
    if (headers) {
      options.headers = {...options.headers,...headers};
    }
    if (body) {
      options.body = body;
    }
    if (query) {
      const params = Object.keys(query)
        .map(k => `${k}=${query[k]}`)
        .join('&');
      url = url.concat(`?${params}`);
    }
    return fetch(url, Object.assign({}, options, { credentials: 'same-origin' })).then(handleResponse);
  },
};

export default httpRequest;

(3)Axios 是一种基于Promise封装的HTTP客户端,其特点如下:

1,浏览器端发起XMLHttpRequests请求

2,node端发起http请求

3,支持Promise API

4,监听请求和返回

5,对请求和返回进行转化

6,取消请求

7,自动转换json数据

8,客户端支持抵御XSRF攻击

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值