在 JavaScript 中捕获 302 FOUND
我使用 jQuery 向我的服务器发出 AJAX POST 请求,该请求可以返回状态为 302 的 HTTP 响应。然后 JavaScript 仅向此 URL 发送 GET 请求,而我想将用户重定向到此响应中的 URL。 这可能吗?
I use jQuery to make an AJAX POST request to my server, which can return HTTP response with status 302. Then JavaScript just sends GET request to this URL, while I'd like to redirect user to URL in this response. Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
由于给出的原因,接受的答案不起作用。 我发表了一条评论,其中包含一个问题的链接,该问题描述了一种解决浏览器透明处理 302 问题的方法:
如何在 jQuery Ajax 调用后管理重定向请求
然而,这是一个有点肮脏的黑客,经过大量挖掘后我找到了我认为更好的解决方案 - 使用 JSON。 在这种情况下,您可以使对 ajax 请求的所有响应都具有代码 200,并且在响应正文中添加某种 JSON 对象,然后您的 ajax 响应处理程序可以以适当的方式使用该对象。
The accepted answer does not work for the reasons given. I posted a comment with a link to a question that described a hack to get round the problem of the 302 being transparently handled by the browser:
How to manage a redirect request after a jQuery Ajax call
However, it is a bit of a dirty hack and after much digging around I found what I think is a better solution - use JSON. In this case, you can make all responses to ajax requests have the code 200 and, in the body of the response, you add some sort of JSON object which your ajax response handler can then use in the appropriate manner.
我不这么认为。 W3C 规定 HTTP 会使用某些状态代码进行重定向,包括 302,必须透明地遵守。 引述如下:
作为实验,我尝试从各种浏览器(Firefox 3.5、Chrome、IE8、IE7、IE6)向服务器发出 Ajax 请求,给出 302 状态代码,并在浏览器的请求对象中显示状态。 在每种情况下,它都显示为 200。
I don't think so. The W3C says that HTTP redirects with certain status codes, including 302, must be transparently followed. Quoted below:
As an experiment, I tried doing Ajax requests from various browsers (Firefox 3.5, Chrome, IE8, IE7, IE6) to a server giving a 302 status code, and showing the status in the browser's request object. In every case, it showed up as 200.
在我的问题中,原因是:
我使用 localhost/Home/Test 地址来测试页面。 但是ajax请求代码使用127.0.0.1/Home/AjaxRequest作为url参数。 当 url 不同时,就会发生此错误。
也许它对某人有帮助:)
In my problem reason was:
i was using localhost/Home/Test addres for testing the page. But ajax request code using 127.0.0.1/Home/AjaxRequest for url parameter. When the urls are different this error occurs.
maybe it helps someone :)
与其要求 Javascript 代码处理 302,不如在 302 事件上返回带有自定义错误代码+消息的 500
Rather than asking the Javascript code to Handle 302, it would be better to return a 500 with custom error code+ message on event of 302