AJAX失败了404 ....但无论如何都有效?是什么赋予了?

时间:2012-03-22 00:13:04

标签: jquery ajax spring model-view-controller

也许我应该闭嘴并继续往前走,但有些东西告诉我事情并不像我想的那样好,我需要解决它。

基本上,我正在做一个简单的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?!

感谢您的任何见解......

脚注:如果这看起来类似于今天的早期问题,请道歉。我从错误的角度出现了核心问题,并在该帖子中造成了比必要的更多混乱......

2 个答案:

答案 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);
}