目前项目中常用的请求接口的方法就是ajax和axios。两个相对应的框架是jq和VUE。另外还有一种不常用的fetch方式。下面就简单的说一下三者。
ajax从开始一直沿用到现在,它本身已经非常完善了,使用还是非常方便的,硬要说缺点的话,可能也就是:
- 它是针对MVC框架编程,不符合现在MVVM框架的潮流;
- 想使用ajax就得引入jq,但是jq本身比较大,如果有其他选择就不要选择引入jq,感觉有点得不偿失。
axios是一个基于promise的http库,个人认为它是在ajax的基础上做了一些抽离,同时适用于浏览器端和Node.js端。axios在浏览器端和ajax一样创建的是XHR(XMLHttpRequest),在node.js端创建http请求,而且本身是轻量级的,感觉是目前各类的首选吧,
fetch是ES6时出现的,使用了ES6的promise对象,在此基础上进行设计的。fetch的代码结构比ajax要简单,不过整体参数差不多。fetch本身问题感觉算是比较大,想使用fetch的话需要对它进行封装。最起码的差距在于:
- fetch只对网络请求报错,400,500之类的都会被当做成功的请求;
- fetch默认不会携带cookie,需要另外添加配置项;
以上对比不难看出,axios是一个集诸多优点于一身的请求方法。
说道接口调用方法,在调用中容易产生的就是跨域问题。
跨域:主要是因为浏览器的同源策略引起的。
同源策略:简单的说是指【域名,协议,端口】相同。
那么相对的处理跨域的方法简单说一下我VUE项目中的处理方法吧。
本地调试的时候可以使用配置api的方式来解决跨域;到了测试环境或者线上环境的时候使用nginx做一个反向代理就可以了。
本地调试的配置方法如下:
在config文件中找到dev配置下的proxyTable项,配置一个“api”的参数项就可以了。看下面的图可能更好理解。
【配置的api对象里面,target是要调用接口的ip】数据页面使用的方法是在接口地址剩余的部分前添加 “/api” 就可以了,具体方法如下:
一些底层的东西目前还没有回顾到,等回顾到的时候会在这篇文章中做更加详细的解释。
以上纯属个人理解,如果有问题或者哪里不对的话,还请留言批注,我会积极修改和处理。