关于ajax不同方式的传值类型及接受方式

关于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:

  1. dataType:“text” :此时res就是后台返回JSON字符串类型。{“success”:true,“msg”:“查询成功!”}
  2. dataType : “json” 此时会把后台返回的字符串类型解析为json对象,类型于这样。

contentType:

ContentType是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。

  1. 如果不指定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)

  1. 基本类型+String
  2. 实体类
  3. @RequestParam
  4. @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标签用错。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章