axios到底哪里好

最近尝试vue, 使用 axios 发送 post 请求 :

axios Example 里面是这样的:

// Performing a POST request

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

下面的例子也不行

// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

上面的官方代码我怎么尝试都行不通, 不管怎样, 发送的都不是 post, 而是 options
我在网上查看了一些解决方法,比如说使用兼容度并不怎么好的 URLSearchParams 和 引入 qs , 或者直接 JSON.stringify, 但是发送过去的数据就是纯字符串了,后端收到还需要转一下才能用,为什么不按照常规的方式来发送数据,就像 jQueryajax 方法一样。
那么问题来了, 我真的有必要为了发送 post 请求而使用兼容并不好的 URLSearchParams 或者为此引入一个 qs 库么?axios 到底有哪里好? 为什么官方的例子却行不通?

阅读 6.1k
5 个回答

...。
这里的options应该是跨域(复杂跨域请求)的预先请求,用来确定有没有跨域权限。
你拿jquery.ajax发跨域请求,也会有一个options请求。
vueaxios没有关系。
vueaxios没有关系。
vueaxios没有关系。


qs转参数是因为axios默认支持application/json请求头与json数据格式。
使用其他请求头和form-data的数据格式需要手动设置请求头和qs转换格式。


qs是用来做序列化的,JSON.stringify也是做序列化处理的,但你要知道他们序列化的结果是不一样的。

var a = {b:1,c:2}
qs-->"b=1&c=2"(这个叫query字符串吗)
JSON.stringify: {"b":1,"c":2}(json字符串)

你如果只是单纯的发送一个post请求,你可以用你觉得怎样方便,怎样写的形式实现。
如果你项目比较大,比较复杂,需要对系统中大多数请求发送前添加heder,对返回结果做统一的报错处理,用axios会比较方便,你觉得难用,仅仅是你目前暂时还不会用而已,而不是它真的难用。
我觉得你需要了解下
application/x-www-form-urlencoded
application/json
text/xml
这几种的区别,以及http请求中Content-Type所代表的含义

赞同 @toBeTheLight 说的,有些人答的都是什么鬼,不是没答到点子上就是前端文盲式的乱答,连"Vue请求之前都会发送一次options请求"都出来了。
建议答题前先提高下跨域的姿势水平。

具体可查阅
HTTP访问控制

options请求并不任何ajax库(axios 或者 jQuery ajax)发送的,而是浏览器自动发送的。这是一种跨域请求的机制,大多数浏览器都有这个机制。如果你在nodejs里发送POST请求,就不会带有options请求。

谢邀!
个人认为有这么几个好处:
1、官方推荐,持续维护。vue-resource已经不再继续更新维护了
2、兼容性也挺好,有插件能往下支持,qs是用来处理数据的,就像原生的JSON.stringify之类的
3、Vue发送请求之前都会发送一次option请求,这个通过之后才会发送真正的请求
4、可以封装请求、配置基本参数,拥有拦截器等等

目前想起来的就这些了,希望能对你有所帮助!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题