AJAX 以 404 失败......但仍然有效吗?是啥赋予了?
Posted
技术标签:
【中文标题】AJAX 以 404 失败......但仍然有效吗?是啥赋予了?【英文标题】:AJAX fails with a 404....but works anyway? What gives?AJAX 以 404 失败......但仍然有效吗?是什么赋予了? 【发布时间】:2012-04-06 13:37:34 【问题描述】:也许我应该闭嘴继续前进,但有些事情告诉我事情并没有我想象的那么好,我需要解决它。
基本上,我正在做一个简单的 AJAX 调用来告诉服务器用户选择了什么:一个已经存在的项目或一个新项目。 AJAX 看起来像这样:
var dataString = 'existingProject='+ $("#existingProject").val() + '&newProjName=' + $("#newProjName").val();
//AJAX call to post selections to server
$.post('/myproj/manageProjects.html',dataString);
处理此 post 调用的 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。服务器处理请求并返回我创建的名为 StatusResponse 的 pojo,其中包含一个布尔值(成功或失败)和服务器反馈消息列表。我创建了一个简单状态为“true”的成功并将其传回。
客户端然后抛出一个 404 manageProjects.html not found 并继续其愉快的方式,就好像什么都没出错一样。
所以....它找到了吗?如果 StatusResponse 类型的 pojo 是来自 Spring MVC 控制器的不适当响应,那么正确的响应是什么?为什么消息会成功到达控制器,但客户端却收到 404?!
感谢您的任何见解......
脚注:如果这看起来与今天早些时候的问题相似,我们深表歉意。我从错误的角度提出了核心问题,并且在那篇帖子中造成了不必要的混乱......
【问题讨论】:
【参考方案1】:当这种情况发生在我身上时,通常是因为 dom 中有一个表单,并且您单击了一个触发 xhr 的提交。它触发 xhr,但它也提交表单,如果没有提供,它将默认为当前 url。因此,请尝试停止传播 javascript 事件、删除提交或仅删除表单标签。
【讨论】:
一个很好的建议。我之前遇到过这个垃圾,然后通过 其实……没有。我是这种编码的新手……您能详细说明“所有这些业务”吗? :) 我不清楚您是指以编程方式还是在测试期间。我没有在代码中进行任何类型的大扫除,但我已经在 3 个浏览器上进行了测试,并且看到了相同的效果。【参考方案2】:尝试添加@ResponseBody 注释,类似这样
@RequestMapping(value="/deleteUser/id", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> deleteUser(@PathVariable("id") long id)
...
return new ResponseEntity<String>(HttpStatus.OK);
【讨论】:
是的,这是由于缺少 ResponseBody 造成的。基本上,服务器向客户端发送了一个客户端不理解的响应。这让我很震惊,因为我认为 404 意味着找不到我映射的 URL。以上是关于AJAX 以 404 失败......但仍然有效吗?是啥赋予了?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 控制器,AJAX GET 有效,但 POST 无效 (404)