美文网首页
前端发请求用什么

前端发请求用什么

作者: 芝麻香油 | 来源:发表于2017-11-09 19:40 被阅读0次

从第一天开始 Buddy 就给我布置了一个作业,然后每次完成后,需求就会发生变化,从第一次做完后需求已经变了很多次了。而这次变的更大。

他用 mocky 给我 mock 了一个网络请求,然后让我使用异步 action 发请求完成。那么问题来了,前端发请求用什么呢?

可能一开始你会想到 ajax,也可能一开始你会和我一样想到 superagent,然而在这里我要说的是 fetch(继昨天用 superagent 被 Buddy 嘲笑后,只能默默的去学习 fetch 了)。

为什么是 Fetch

XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离的原则,配置和调用方式非常混乱。而且基于事件的异步模型写起来没有现代的 Promise 友好。

Fetch 的出现就是为了解决 XMLHttpRequest 的问题。

例如,使用 superagent 我们发送一个请求一般是这样的:

superagent
    .get('http://www.mocky.io/v2/5a01c6a83300005002f6ed66')
    .end((err, res) => {
        if (err) {
            throw  err;
        } else {
            console.log(res.body)
        }
    })

而使用 Fecth 是这样写的

fetch('http://www.mocky.io/v2/5a01c6a83300005002f6ed66')
                .then(response => response.json())
                .then(data => console.log('data', data))
                .catch(error => console.log('error', error));

由上面的例子可以看出,Fetch 优点有:

  • 语法简洁,更加语义化
  • 基于标准 Promise 实现,支持 async / await
  • 同构方便,使用 isomorphic-fetch(此处 isomorphic-fetch 是一个 polyfill,一般用于 express 作为后端时;而通常用的 Fetch 是 Fetch Api

对于以上三个优点,其实我有感触的也就第一点,而后面两个可能是见得太少了吧,还是没感觉,毕竟作为前端要紧跟前端更新的速度。

Fetch

fetch(url, {})
其中,第二个参数是可选的,通常以对象的形式,包括:请求类型请求体请求头部 等信息。网络请求的返回值是一个 Promise 需经过 JSON 解析,才能拿到真正的响应体。

例子中的 then()catch() 均是 Promise 的方法,具体参见我前几天写的Promise 学习笔记,或者 MDN 中的文档。

兼容性

image.png

Fetch 常见坑

  • Fetch 请求默认是不带 cookie 的,需要设置 fetch(url, {credentials: 'include'})
  • 服务器返回 400500错误码时并不会 reject。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false),只有网络错误这些导致请求不能完成时,fetch 才会被 reject

相关文章

  • 前端发请求用什么

    从第一天开始 Buddy 就给我布置了一个作业,然后每次完成后,需求就会发生变化,从第一次做完后需求已经变了很多次...

  • post 数据发送、接受(node 服务)

    背景:前端用 fetch发请求,在 node服务端获取post请求数据 方案:前后端均需配置 1、前端 fetch...

  • Vue项目使用WebSocket技术

    【基础】为什么使用WebSocket? 前端和后端的交互模式最常见的就是前端发数据请求,后端响应传输数据之前端进行...

  • thinkphp处理前端跨域请求

    1、前端js正常ajax请求 后端php返回 2、前端js用ajax跨域请求 thinkphp返回 ajaxRet...

  • vue项目使用websocket技术

    一、为什么需要websocket? 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。...

  • AJAX发送请求、同源策略与CORS跨域

    1. 如何发请求?(ajax以前) 用 form 可以发请求,但是会刷新页面或新开页面用 a 可以发 get 请求...

  • AJAX

    如何发请求? 用form可以发post或get请求,但是但是会刷新页面或新开页面 用 a 可以发 get 请求,但...

  • AJAX入门

    1.历史上发送请求的方式 用form发请求会刷新页面或新开页面用a发get请求会刷新页面或新开页面用img发请求,...

  • Django csrf机制设置csrftoken

    最近使用vue+django做一个项目 问题: 前端发get请求正常,发post请求的时候报错(403 Forbi...

  • 自己实现AJAX

    如何发请求? 用form可以发请求,但是会刷新页面或新开页面;用a可以发get请求,但是也会刷新页面或新开页面;用...

网友评论

      本文标题:前端发请求用什么

      本文链接:https://www.haomeiwen.com/subject/zsummxtx.html