最近在做項目時,同事遇到ajax調用一個Controller方法後,該方法在不返回前臺的情況下執行兩次,導致數據保存了兩遍。
簡略代碼如下:
js代碼如下:
$.ajax({
cache :false,
type: "POST",
url: "${ctx}/3typePerson/newUserSave",
dataType: "JSON",
data: $("#editForm").serializeArray(),
success: function(data){
alert('成功');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('失敗');
}
});
Controller方法:
@RequestMapping(value = "/newUserSave", method = RequestMethod.POST)
public void advanceCaseinfoSave(String id,BjNetcase3typeCompany bjNetcase3typeCompany,
BjNetcasebaseinfo bjNetcasebaseinfo,
HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String,Object> resMap = new HashMap<String,Object>();
resMap.put("caseid", info.getId());
resMap.put("caseno", info.getCaseno());
resMap.put("success", true);
response.getWriter().write(JSONUtil.writeMapJSON(resMap));
}
最後查找發現罪魁禍首,是過濾器!!!
總結:如果一個過濾器方法中chain.doFilter(request, response);語句出現一次以上,每一句後面一定把return;語句加上!!!否則後臺同一方法就會被調用多次!!!
請關注我微信公衆號: