關於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標籤用錯。