之前一直没有留意这个属性,然后项目中突然发现同一个请求,传参和不传参的contentType不同。
先看看jquery文档中的$.ajax:
contentType属性
类型:String
默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。
然而 application/x-www-form-urlencoded 这种形式可以传简单的json,即不带嵌套类型的json;
而复杂的 JSON 就没办法了,如下:
{
data: {
a: [{
x: 2
}]
}
}
复杂的 JSON 传进去可以发送请求,但是服务端收到数据为空, 因为 ajax 没有办法知道怎样处理这个数据。
解决办法如下:
$.ajax({
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({a: [{b:1, a:1}]})
})
定义一种叫 application/json 的类型。这种类型是 text , 我们 ajax 的复杂JSON数据,用 JSON.stringify序列化后,然后发送,在服务器端接到然后用 JSON.parse 进行还原就行了,这样就能处理复杂的对象了。