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 事件、删除提交或仅删除表单标签。

【讨论】:

一个很好的建议。我之前遇到过这个垃圾,然后通过
解决了它。在这种情况下,我尝试了这一点并完全删除了表格,但没有运气。相同的结果:服务器“manageProjects.html”中的 404 未找到,但仍能正常工作。我找不到其他可能正在提交的表单。它来自一个对话框,所以它只是一个 div。还有其他想法吗?有点难过...
其实……没有。我是这种编码的新手……您能详细说明“所有这些业务”吗? :) 我不清楚您是指以编程方式还是在测试期间。我没有在代码中进行任何类型的大扫除,但我已经在 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)

MockMvc GET 请求失败,出现 404 但 URL 有效

使用 jQuery 检查链接是不是仍然有效

jQuery Ajax 返回 404 错误,但响应正确

后端没有错误,但 Ajax 功能失败

Laravel / AJAX Like 按钮错误:请求失败,状态码 404