1. 程式人生 > >AJAX傳送GET、POST、DELETE、PUT請求到伺服器

AJAX傳送GET、POST、DELETE、PUT請求到伺服器

$.ajax({})設定contentType引數值為 'application/x-www-form-urlencoded;charset=UTF-8'(不設定contentType引數值也是這種也是這中情況)

  • 傳送GET、POST請求只需要設定 type 引數值為對應的 'get''post'即可。
  • 傳送DELETE、PUT請求時
    1. 先需要在web.xml配置檔案中新增一個將post請求轉換為delete或put請求的filter,程式碼見下方
    2. 前端$.ajax({})中設定type引數值為 'post',然後在請求引數中加一個引數,引數鍵是 _method,引數值是 'delete'
      'put'

以發DELETE請求為例,前端程式碼:

$.ajax({
    type : 'post',
    data : {'_method':'delete','dbId':node.dbId,'schemaName':node.schemaName,'date':new Date()},
    dataType : 'json',
    url : '${ctp}/IndexOperate/Index/1',
    success : function(data,textStatus,jqXHR){
        console.log(data);
    }
});

後端處理器程式碼:

@RequestMapping(value="/Index/{indexId}",method=RequestMethod.DELETE)
@ResponseBody
public int delIndex(@PathVariable(value="indexId")int indexId,
     @RequestParam(value="dbId")int dbId,
     @RequestParam(value="schemaName",required=false)String schemaName) {
     int result = indexService.deleteIndexById(indexId,dbId,schemaName);

     return
result; }

將post請求轉換為delete或者put請求的filter

<!-- 將post請求轉換為delete或者put請求 -->
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <servlet-name>springDispatcherServlet</servlet-name>
</filter-mapping>

注意:
    在此情況下,若前端$.ajax({})中設定type引數值為 'delete',請求會到達後端對應的處理器方法,但是接收的引數會為null,具體情況見我的另一篇文章:傳送DELETE或PUT請求時springmvc獲取引數為NULL

$.ajax({})設定contentType引數值為 'application/json;charset=UTF-8'

此種情況一般發生在將請求引數以json資料的形式傳送到後臺,傳送GET、POST、DELETE、PUT請求只需要設定 type 引數值為對應的 'get''post''delete''put'即可。

以傳送delete請求為例,前端程式碼:

$.ajax({
    type : 'delete',
    data : JSON.stringify(recordInfo),
    url : '${ctp}/TableOperate/UserTableRecord',
    contentType : 'application/json;charset=UTF-8',
    dataType : 'json',
    success : function(data,textStatus,jqXHR){
        console.log(data);
    }
});

後端處理器程式碼:

@RequestMapping(value="/UserTableRecord",method=RequestMethod.POST)
@ResponseBody
public List<Message> batchAddRecord(@RequestBody Map<String,Object> recordInfo) {
    System.out.println(recordInfo);
    List<Message> msgs = new ArrayList<>();

    return msgs;
}