ajax中put的传参,解决Ajax中Restful风格PUT和DELETE请求传递参数无效

问题:在Ajax中,采用Restful风格PUT和DELETE请求传递参数无效,传递到后台的参数值为nulljavascript

缘由:html

* Tomcatjava

*       1.将请求体中的数据,封装成一个map

*       2.request.getParameter("id")就会从这个map中取值

*       3.SpringMvc封装POJO对象的时候,

*            会把POJO中每一个属性的值进行request.getParamter();

*

*  AJAX发送PUT请求引起的

*     PUT请求,请求体中的数据,request.getParamter()拿不到

*     Tomcat一看是PUT就不会封装请求体中的数据为map,只有POST形式的请求才封装请求为map

解决方案:   web

一、 能支持直接发送PUT之类请求还要封装请求体中的数据,可是不支持DELETEajax

在web.xml中配置上HttpPutFormContentFilter,

做用:将请求体中的数据解析包装成一个map

request被从新包装,request.getParameter()被重写,就会从本身封装的map中取数据spring

(局限性:仅仅适合表单对象信息的传参,若是是单个信息数据不经过表单,例如,简单传入一个id,来更新特定数据就发现仍是没法传参)app

HttpPutFormContentFilter

org.springframework.web.filter.HttpPutFormContentFilter

HttpPutFormContentFilter

/*

配置完后,当更新对象,ajax传参时,直接在参数设置 type:"PUT" 就行。post

二、 支持PUT,DELETE请求url

在web.xml中配置spa

HiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

HiddenHttpMethodFilter

/*

原理是:在Aajx中发送post请求后,带_method参数,将其修改成PUT,或者DELETE请求

例子:JS代码中该为

$.ajax({

url:"${APP_PATH}/RecordController/record",

type:"POST",

data:{id :id ,

_method:"PUT"},

success:function(result){

alert("update success");

}

}); 或者在url中加&_method=”PUT”或者&_method=”DELETE”便可