javascript - jquery ajax contentType是啥意思?
phpcn_u1582
phpcn_u1582 2017-07-05 11:02:37
0
6
993

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
phpcn_u1582
phpcn_u1582

全部回复(6)
漂亮男人

参考:jQuery.ajax() 文档

contentType(默认:'application/x-www-form-urlencoded; charset=UTF-8')

类型:布尔值或字符串

向服务器发送数据时,使用此内容类型。默认值为“application/x-www-form-urlencoded; charset=UTF-8”,这适用于大多数情况。如果您显式地将内容类型传递给 $.ajax(),那么它始终会发送到服务器(即使没有发送数据)。从 jQuery 1.6 开始,您可以传递 false 来告诉 jQuery 不要设置任何内容类型标头。注意:W3C XMLHttpRequest 规范规定字符集始终为 UTF-8;指定另一个字符集不会强制浏览器更改编码。注意:对于跨域请求,将内容类型设置为 application/x-www-form-urlencoded, multipart/form-data, or text/plain 以外的任何内容都会触发浏览器向服务器发送预检 OPTIONS 请求。

一般是用application/x-www-form-urlencoded,也就是默认值,上传文件通常是用 multipart/form-data,现在很多使用 JSON 接口的也用后面这种。text/plain我平时见得很少。

补充

jQuery 的 ajax 要发送 application/json 请求需要

  1. contentType:“application/json;charset=UTF-8”

  2. processData:假

  3. 数据:stringify(aObject)

比如

雷雷

过去多啦不再A梦

使用的数据格式

滿天的星座

简单来说,就是把你发请求的数据当做xxx类型处理。
对应的,dataType,就是把服务端响应回来的数据当做xxx类型处理。

黄舟

http中传的数据都是都是字符串,只是服务器在接受到数据时会根据contentType来用不同的方式解析字符串。对象只能存在于内存中,不仅仅是http,所有在网络中传输的数据都是基于字符串的。

Peter_Zhu

首先我不觉得你的抓包有问题,如果你确实是用的是POST请求的话,
从抓包看起来这是个GET请求,因为POST不会对请求参数做序列化处理

下面说下contentType是啥意思?

ajax的contentType是设置的http的请求头,这个头的目的是告诉服务器端,我的请求参数是什么格式的数据,你要按照对应的格式去处理,就这样。
默认的是 "application/x-www-form-urlencoded; charset=UTF-8",也就是普通的表单提交的格式,当然你也可以覆盖,比如"application/json",这样服务端可以直接拿到一个json请求参数。而不是一个一个的key value

伊谢尔伦

这只是修改请求头中的contentType,和你接受服务器响应是什么内容没有关系。

你可以加上这个拿到json格式的数据。

dataType:"json"
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板