从客户端,我正在使用jquery发出类型为“delete”的Ajax请求。在服务器端,我正在执行res.redirect(URL)。但是不是重定向,浏览器再次发出删除请求从服务器端返回的URL以进行重定向。 但是,邮件请求没有发生。邮件请求一切正常。
答案 0 :(得分:0)
简短版
Ajax正试图按照请求来获得成功的响应(2xx)。如果要删除资源并将用户发送到新的网页,则需要在收到Ajax调用的成功响应后进行处理。
完整解释
虽然有时在处理请求后使用重定向(例如登录成功/失败),但实际上并不是他们想要的。通常,您只需重定向用户以将其转到他们要查找的资源。例如,您可以将POST /blog-post
等端点移动到POST /blog-article
的新位置。你在这里对请求者说的是过去曾经存在的东西,但现在他们需要在其他地方提出要求以找到他们之后的东西。在尝试阻止link rot时,这非常重要。
接受和处理请求,然后将用户移到另一个页面的想法真的很巧合。由于浏览器处理URL请求的方式,它恰好正常工作。
我希望您的POST请求实际上是使用表单,在这种情况下,浏览器正在遵循重定向,因为它收到类似301的内容并且正在尝试查看请求链。但是,在使用Ajax时,Ajax调用本身正在处理重定向,而不是整个浏览器。在这种情况下,Ajax的行为就好像您期望端点被移动一样。因此,例如,如果您在服务器端移动了端点,那么您的应用程序仍将按照重定向指令的方式运行。
您真正需要做的是返回对您的Ajax调用的成功响应,例如204(无内容),然后在您的前端将用户移动到新页面。
这并不方便我承认,但是当你明白为什么重定向确实存在时,它会更有意义。它们不是告诉用户转移到其他内容的方式,它们是尝试防止链接损坏并使应用程序继续使用可能稍微改变的API的方式。