POST请求contentType设置为application/json,但请求却把data的json转成了字符串?
请大神指教是什么原因?
代码如下
$.ajax({
method: 'POST',
url: "demo_test.txt",
data: {
aa: 1,
bb: 2
},
contentType: "application/json",
success: function (result) {}
});
请求抓包
POST http://localhost:8888/demo_test.txt HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 9
Origin: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36
Content-Type: application/json
Accept: */*
X-Requested-With: XMLHttpRequest
Referer: http://172.17.35.112:8099/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: selectFluence=4; VFS_USERNAME=admin; VFS_PASSWORD=123456; VFS_APPURL=; VFS_ISSAVE=true; VFS_ISDMZ=true; webserver_is_save=0; _alert=1495876699555
aa=1&bb=2
参考:jQuery.ajax() 文档
一般是用
application/x-www-form-urlencoded
,也就是默认值,上传文件通常是用multipart/form-data
,现在很多使用 JSON 接口的也用后面这种。text/plain
我平时见得很少。补充
jQuery 的 ajax 要发送 application/json 请求需要
contentType:“application/json;charset=UTF-8”
processData:假
数据:stringify(aObject)
比如
雷雷使用的数据格式
简单来说,就是把你发请求的数据当做xxx类型处理。
对应的,dataType,就是把服务端响应回来的数据当做xxx类型处理。
http中传的数据都是都是字符串,只是服务器在接受到数据时会根据contentType来用不同的方式解析字符串。对象只能存在于内存中,不仅仅是http,所有在网络中传输的数据都是基于字符串的。
首先我不觉得你的抓包有问题,如果你确实是用的是POST请求的话,
从抓包看起来这是个GET请求,因为POST不会对请求参数做序列化处理
下面说下contentType是啥意思?
ajax的contentType是设置的http的请求头,这个头的目的是告诉服务器端,我的请求参数是什么格式的数据,你要按照对应的格式去处理,就这样。
默认的是 "application/x-www-form-urlencoded; charset=UTF-8",也就是普通的表单提交的格式,当然你也可以覆盖,比如"application/json",这样服务端可以直接拿到一个json请求参数。而不是一个一个的key value
这只是修改请求头中的contentType,和你接受服务器响应是什么内容没有关系。
你可以加上这个拿到json格式的数据。