40

我使用 jQuery 向我的服务器发出 AJAX POST 请求,它可以返回状态为 302 的 HTTP 响应。然后 JavaScript 只是向这个 URL 发送 GET 请求,而我想在这个响应中将用户重定向到 URL。这可能吗?

4

5 回答 5

23

由于给出的原因,接受的答案不起作用。我发布了一条评论,其中包含一个问题的链接,该问题描述了一种破解 302 被浏览器透明处理的问题:

如何在 jQuery Ajax 调用后管理重定向请求

但是,这有点肮脏,经过大量挖掘后,我发现了我认为更好的解决方案-使用JSON。在这种情况下,您可以使对 ajax 请求的所有响应都具有代码 200,并在响应正文中添加某种 JSON 对象,然后您的 ajax 响应处理程序可以以适当的方式使用该对象。

于 2009-10-07T22:34:47.560 回答
6

我不这么认为。W3C表示,必须透明地遵循带有某些状态代码(包括 302)的 HTTP 重定向。引用如下:

如果响应是 HTTP 重定向(状态代码 301、302、303 或 307),则必须透明地遵循它(除非它违反安全或无限循环预防措施)。任何其他错误(包括 401)必须导致对象使用该错误页面作为响应。

作为一个实验,我尝试从各种浏览器(Firefox 3.5、Chrome、IE8、IE7、IE6)向服务器发出 Ajax 请求,并提供 302 状态代码,并在浏览器的请求对象中显示状态。在每种情况下,它都显示为 200。

于 2009-09-10T18:22:01.560 回答
2

在我的问题原因是:

我正在使用localhost/Home/Test地址来测试页面。但是使用127.0.0.1/Home/AjaxRequest作为 url 参数的ajax 请求代码 。当 url 不同时,会发生此错误。

也许它可以帮助某人:)

于 2011-02-18T18:09:29.820 回答
-1

与其要求 Javascript 代码处理 302,不如在 302 事件上返回带有自定义错误代码 + 消息的 500

于 2010-09-18T11:27:06.433 回答
-5
function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}
于 2008-12-16T23:19:30.020 回答