关于ajax不同方式的传值类型及接收方式
1.传值
先看看ajax的基本格式
$.ajax({
url: "",
type:"",
dataType"",
contentType:"",
data: ,
success:function(res){
}
})
- url:传值的地址
- type:传值类型 GET/POST
- dataType:指定以什么方式来处理接受到的数据;json/text
- data:请求的数据
- contentType:请求发送至服务器时的data编码类型 ;application/json / application/x-www-form-urlencoded
dataType:
- dataType:“text” :此时res就是后台返回JSON字符串类型。{“success”:true,“msg”:“查询成功!”}
- dataType : “json” 此时会把后台返回的字符串类型解析为json对象,类型于这样。
contentType:
ContentType是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。
- 如果不指定contentType,则请求数据类型为json字符串格式和JSON对象都可以。默认为 application/x-www-form-urlencoded。故一般不指定ContentType。
var id ="1";
//方式1:POST
type: "POST",
data:{"cameraId":id}//可以
data:"cameraId="+id//可以
data:JSON.stringify({"cameraId":id})//可以传但是后台只能通过@RequestBody获取数据,其他方式获取不到
//方式2:GET
data:{"cameraId":id}//可以
data:"cameraId="+id//可以
data:JSON.stringify({"cameraId":id})//400错误 url?{%22cameraId%22:%221%22}后面无法正确解析参数
2.如果指定了contebtType=“application/json”,data只能传递json字符串否则报400错误。
type: "POST",
contentType: "application/json",
data: JSON.stringify({"cameraId": id}),
/*这种方式可以传递成功但是后台接受的时候只能使用@RequestBody PresetInfo PresetInfo 来接收
否则接收不到数据(cameraId是PresetInfo实体类的属性)
*/
如果非得指定contebtType=“application/json”,且传递方式是POST,可以这样设置data格式
data:"cameraId="+id
/*后台接受可以用@RequestParam("cameraId")/String cameraId/PresetInfo presetInfo都可以*/
2.接收
一般接收有以下几种方式(SSM)
- 基本类型+String
- 实体类
- @RequestParam
- @RequestBody
对于@ResquestParam和@RequestBody标签的区别:
@ResquestParam:用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
@RequestBody:处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。例如:ajax请求是指定contebtType=“application/json”。
3.总结
下面列举了能正确接收数据的方式
方式\data | JSON对象{cameraId:id} | 字符串"cameraId="+id | 字符串JSON.stringify({cameraId:id}) |
POST | 实体类、基本类型+String、@RequestParam | 实体类、基本类型+String、@RequestParam | @RequestBody |
GET | 实体类、基本类型+String、@RequestParam | 实体类、基本类型+String、@RequestParam | 400错误 |
一般报400原因就是data数据和contentType不对应。
一般报415原因后台处理请求的方式和请求数据的类型不匹配,也就是说@ResquestParam和@RequestBod标签用错。