也许我应该闭嘴并继续往前走,但有些东西告诉我事情并不像我想的那样好,我需要解决它。
基本上,我正在做一个简单的AJAX调用来告诉服务器用户选择了什么:已经存在的项目或新项目。 AJAX看起来像这样:
var dataString = 'existingProject='+ $("#existingProject").val() + '&newProjName=' + $("#newProjName").val();
//AJAX call to post selections to server
$.post('/myproj/manageProjects.html',dataString);
处理此帖子调用的Spring MVC签名如下所示:
@RequestMapping(value="/manageProjects",produces="application/json",method=RequestMethod.POST)
public StatusResponse manageProjects(
@RequestParam(value="existingProject",required=false) String existingProj,
@RequestParam(value="newProjName",required=false) String newProj,
HttpSession session){
我的想法是,我正在接受带有我期望的正确变量和值的manageProjects调用。服务器处理请求并返回我创建的pojo,名为StatusResponse,包含布尔值(成功或失败)和服务器反馈消息列表。我创建一个简单状态为“true”的成功并将其传回去。
客户端然后抛出404找不到的manageProjects.html并继续其快乐的方式,好像什么都没有出错。
所以......它找到了与否?如果StatusResponse类型的pojo是来自Spring MVC控制器的不恰当响应,那么正确的响应是什么?为什么消息成功命中控制器但客户端收到404?!
感谢您的任何见解......
脚注:如果这看起来类似于今天的早期问题,请道歉。我从错误的角度出现了核心问题,并在该帖子中造成了比必要的更多混乱......
答案 0 :(得分:2)
当我遇到这种情况时,通常是因为dom中有一个表单,并且您点击了一个触发xhr的提交。它会触发xhr,但它也会提交表单,如果没有提供,则默认为当前url。因此,请尝试停止传播javascript事件,删除提交,或者只删除表单标记。
答案 1 :(得分:2)
尝试添加@ResponseBody注释,像那样
@RequestMapping(value="/deleteUser/{id}", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> deleteUser(@PathVariable("id") long id) {
...
return new ResponseEntity<String>(HttpStatus.OK);
}