从客户端,我使用 jquery 发出类型为“delete”的 Ajax 请求。在服务器端,我正在执行 res.redirect(URL)。但是浏览器不是重定向,而是再次发出删除请求从服务器端返回的 URL 用于重定向。 但是,对于 post 请求,这种情况不会发生。post 请求一切正常。
最佳答案
简短版本
Ajax 正试图遵循该请求,直至其痛苦的结局,以获得成功的响应 (2xx)。如果您想要删除资源并将用户发送到新网页,则需要在收到 Ajax 调用的成功响应后进行处理。
完整说明
虽然有时会在处理请求(例如成功/失败的登录)后使用重定向,但这并不是它们真正的用途。通常,您只会重定向用户以使他们找到他们正在寻找的资源。例如,您可以将 POST/blog-post
等端点移动到 POST/blog-article
的新位置。您在这里对请求者说的是,某些东西曾经在它所在的地方,但现在他们需要在其他地方发出请求才能找到他们想要的东西。当试图阻止 link rot 时,这一点非常重要。 .
接受并处理请求,然后将用户移至另一个页面的想法实际上更像是巧合。它只是由于浏览器处理 URL 请求的方式而起作用。
我预计您的 POST 请求实际上使用的是表单,在这种情况下,浏览器会遵循重定向,因为它收到了类似 301 的内容,并尝试查看请求链。然而,当使用 Ajax 时,重定向是由 Ajax 调用本身处理的,而不是由整个浏览器处理的。在这种情况下,Ajax 的行为就像您期望端点已被移动一样。例如,如果您将端点移动到服务器端,您的应用程序仍然会按照重定向指令运行。
您真正需要做的是返回对 Ajax 调用的成功响应,例如 204(无内容),然后在前端将用户移至新页面。
我承认这不太方便,但是当您了解重定向实际上存在的原因时,它就更有意义了。它们不是告诉用户转向其他内容的方式,而是尝试防止链接失效并使应用程序能够继续针对可能已略有更改的 API 工作的方式。
关于ajax - Express 中 'delete' 之后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323692/