我有一个Spring MVC控制器,我通过JQuery.ajax调用。
控制器中的映射是:
@RequestMapping(value = "/remove", method = RequestMethod.POST)
@ResponseBody
public void remove(@RequestParam("value1") String value1,
@RequestParam("value2") String value2)
{
// do stuff
}
ajax调用是:
$.ajax({
url: '/appserver/model/remove',
data: { value1: value1, value2: value2 },
type: 'POST',
traditional: true,
success: function() {
// do something on success
},
error: function(jqXHR, textStatus, errorThrown) {
// do something on error
}
});
POST调用成功完成,HTTP状态为200.但是,在Firefox控制台中输出以下内容:
no element found ... myscript.js:1
如果我更改控制器以返回布尔值,则此错误消失。但是,根据具有@ResponseBody的this question对void返回类型的方法有效。
我可以更改任何内容以删除此消息吗?
答案 0 :(得分:2)
如JQuery Bugs和Firefox Bug中所述,当响应实体主体为空时,会出现Firefox问题。
要修复它,您必须在Controller方法中返回这样的ResponseEntity。
尝试在您的请求中添加 dataType:' text' :
$.ajax({
url: '/appserver/model/remove',
data: { value1: value1, value2: value2 },
type: 'POST',
traditional: true,
dataType: 'text',
success: function() {
// do something on success
},
error: function(jqXHR, textStatus, errorThrown) {
// do something on error
}
});
并修改您的Controller以返回 ResponseEntity ,并将String作为第一个参数
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public ResponseEntity<String> remove(@RequestParam("value1") String value1,
@RequestParam("value2") String value2)
{
// do stuff
return new ResponseEntity<String>("OK!!!",HttpStatus.NO_CONTENT);
}