1. 程式人生 > 實用技巧 >springmvc環境下的ajax請求

springmvc環境下的ajax請求

前端傳送陣列

1、準備要傳送的陣列

  var array = [5,8,12];

2、將JSON陣列轉換為JSON字串

  var arrayStr = JSON.stringfy(array);

3、傳送Ajax請求

  $.ajax({

    "url":"send/array/plan/three.html"

    "type":"post",

    "data": arrayStr,                //將json字串作為請求題

    "contentType":"application/json;charset=UTF-8" //告訴伺服器當前的請求體是json格式

  })

4、後端接收資料

@ResponseBody
@RequestMapping("/send/array/plan/three")
public String receiveArayPlanThree(@RequestBody Integer[] empIdArray){
        for(Integer empId : empIdArray){
             System.out.println(empId);        
      }      
        return "success";    
}

需要注意的點

1、前端

  首先準備好要傳送的json資料

    json物件

    json陣列

  將json物件或json陣列轉換成json字串

    var = arrayStr = JSON.stringify(array);

  將json字串直接賦值給data屬性

    "data":arrayStr

  必須要設定contentType

    "contentType":"application/json;chatset=UTF-8"

2、後端

  加入jackson依賴

  開啟註解驅動

  使用註解

    @RequestBody Integer[] empIdArray

<!-- Spring 進行 JSON 資料轉換依賴 
--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>

傳送複雜物件

1、準備要傳送的json資料

var studeng = {
            "stuId":123,
            "stuName":"tom",
            "stuAge":22,
            "address":{
                "province":"guangdong"
                "city":"guangzhou",
                "street":"hello"
            },
            "schoolList":[
                {
                    "schoolName":"schoolOne",
                    "schoolSize":500
                }
            ],
            "scoreMap":{
                "english":100
            }
        };

2、將json資料轉換為json字串

var requestBody = JSON.stringify(student);

3、傳送ajax請求

$.ajax({
            "url":"save/student.html",
            "type":"post",
            "data":requestBody,
            "contentType":"application/json;charset=UTF-8",
            "dataType":"text",
            "success":function (response) {
                alert(response)
            }
        })

4、後臺接收

@ResponseBody
@RequestMapping("sava/student.html")
public String saveStudent(@RequestBody Student student){
       System.out.println(student.toString());
      return "success";
}    

小結

@RequestBody使用的場景:傳統傳送請求引數方式不方便傳送的資料,使用json請求體的方式傳送.特別是要傳送複雜物件的時候.

對比

統一返回資料格式

/**
 * @Description 對ajax請求返回的結果進行規範
 *
 * 統一整個專案中ajax請求返回的結果
 */
public class ResultEntity<T> {
    private static final String SUCCESS = "SUCCESS";
    private static final String FAILED = "FAILED";
    // 封裝當前請求的處理結果是成功還是失敗
    private String result;
    // 請求處理失敗後的資訊
    private String message;
    // 要返回的資料
    private T data;

    public ResultEntity(String result, String message, T data) {
        this.result = result;
        this.message = message;
        this.data = data;
    }

    public ResultEntity() {
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "ResultEntity{" +
                "result='" + result + '\'' +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }

    public static <E> ResultEntity<E> successWithoutData() {
        return new ResultEntity<E>(SUCCESS,null,null);
    }
    public static <E> ResultEntity<E> sucessWithData(E data) {
        return new ResultEntity<E>(SUCCESS,null,data);
    }
    public static <E> ResultEntity<E> failed(String message) {
        return new ResultEntity<E>(FAILED,message,null  );
    }
}