03月15, 2017

关于请求content-type

今天在使用axios时踩坑了。

主要是对content-type理解不深。那么简单来介绍一下。

抛开文件上传,我们往后端post数据,一般就以下两种content-type

  • "application/x-www-form-urlencoded"
  • "application/json"

第一个是最常见的,它就相当于:

a=1&b = 2

然后后端会以getParam的方式来获取到具体的参数。

另一种是后端以MVC的形式来接收,简单的理解就是key value的键值对,所以需要传递的是字符串的json:

{a: 1, b:2}

如果我们用jQuery:

$.ajax({
     url: url,
     type: "post",
     data: {
            a: 1,
            b: 2
     }
})

在不指定Content-type的情况下,它会以"application/x-www-form-urlencoded"来往后端传递数据,这时候它会把data给param一下,即上面的data最终会变为:

a = 1 & b = 2

如果需要指定Content-type为 "application/json"时,则需要手动把data转为字符串的格式,不然的话,它会变成上面的格式,但这样就不对了。

axios这玩意则相反了,默认content-type为"application/json"。所以需要反过来,如果content-type是"application/x-www-form-urlencoded",则需要手动param一下字符串,将json转为url的模式。

所以这个还是得看后端,后端是spring MVC的方式,用axios想必是非常爽,反之。。

不过我有一个问题想不通,为什么两个框架不处理一下,根据content-type来判断处理一下呢?

本文链接:www.my-fe.pub/post/ajax-content-type.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。