$.ajax 中的contentType
来源:互联网 发布:java面向对象 编程题 编辑:程序博客网 时间:2024/06/05 10:11
在 cnodejs.org 论坛中有一个问题,让我也很奇怪,说是 $.ajax 设置数据类型 applicaiton/json之后,服务器端(express)就拿不到数据,好奇之下,就去翻了翻资料,发现了一个自己也没有注意到的事。于是有了这篇文章。
正文
$.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。
在http 请求中,get 和 post 是最常用的。在 jquery 的 ajax 中, contentType都是默认的值:application/x-www-form-urlencoded,这种格式的特点就是,name/value 成为一组,每组之间用 & 联接,而 name与value 则是使用 = 连接。如: wwwh.baidu.com/q?key=fdsa&lang=zh 这是get , 而 post 请求则是使用请求体,参数不在 url 中,在请求体中的参数表现形式也是: key=fdsa&lang=zh的形式。
键值对这样组织在一般的情况下是没有什么问题的,这里说的一般是,不带嵌套类型JSON,也就是 简单的JSON,形如这样:
{ a: 1, b: 2, c: 3}但是在一些复杂的情况下就有问题了。 例如在 ajax 中你要传一个复杂的 json 对像,也就说是对象嵌数组,数组中包括对象,兄果你这样传:
{ data: { a: [{ x: 2 }] }}
这个复杂对象, application/x-www-form-urlencoded 这种形式是没有办法将复杂的 JSON 组织成键值对形式(当然也有方案这点可以参考 ) ,你传进去可以发送请求,但是服务端收到数据为空, 因为 ajax 没有办法知道怎样处理这个数据。
这怎么可以呢?
聪明的程序员发现 http 还可以自定义数据类型,于是就定义一种叫 application/json 的类型。这种类型是 text , 我们 ajax 的复杂JSON数据,用 JSON.stringify序列化后,然后发送,在服务器端接到然后用 JSON.parse 进行还原就行了,这样就能处理复杂的对象了。
$.ajax({ dataType: 'json', contentType: 'application/json', data: JSON.stringify({a: [{b:1, a:1}]})})这样你就可以发送复杂JSON的对象了。像现在的 restclient 都是这样处理的。
参考文章
- jquery ajax 文档,告诉你可以使用默认的application/x-www-form-urlencoded, multipart/form-data, or text/plain 这三种,其它的也可以,但是需要告诉ajax 的怎样序列化它。
- datetype 和 contenttype 的区别,这篇文章告诉你,datetype 和 contentType 的区别。
- jquery ajax 发送 JSON,这篇文章告诉你如何使用 contentType。
- application-x-www-form-urlencoded,这篇文章告诉你如何 application-x-www-form-urlencoded 的区别。
- post数据,这篇文章讲 post 数据形式。
转载地址:https://www.cnblogs.com/htoooth/p/7242217.html
- $.ajax中的contentType
- $.ajax 中的contentType
- ajax 中的contentType
- $.ajax 中的contentType
- ajax中的contentType和dataType
- 关于学习ajax中的contentType属性笔记
- $.ajax 中的contentType...json传参相关
- java URLConnection中的 Content-Type 与 ajax 的contentType
- web中的contentType
- http响应中的ContentType
- HttpWebRequest中的ContentType详解
- $.ajax 中的contentType为application/json时,服务端接收不到数据
- JSP中的pageEncoding和contentType
- ASP中的ContentType类型大全
- 如何设置Response中的ContentType
- jsp 中的ContentType和pageEncoding
- JSP文件中的pageEncoding、contentType
- Ajax应用常见的HTTP ContentType设置
- Spider Man CodeForces
- C++构造函数的三个作用
- L1-034. 点赞
- Android应用内多进程的使用及注意事项
- Asynchronous Methods for Deep Reinforcement Learning 阅读笔记
- $.ajax 中的contentType
- 使用ajax和json实现迭代数据的效果
- 使用eclipse插件创建一个web project
- Matlab报错问题
- Java 多线程
- 深度详解Retrofit2使用(二)实践
- 代码的哲学(c/c++):从常量到变量
- shell脚本中echo显示内容带颜色
- dozer的基本用法