在JavaScript中捕获302 FOUND

时间:2008-12-16 23:01:34

标签: javascript jquery ajax http-status-code-302

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

6 个答案:

答案 0 :(得分:22)

由于给出的理由,接受的答案不起作用。我发布了一个评论,其中包含一个问题的链接,该问题描述了解决浏览器透明处理302问题的黑客攻击:

How to manage a redirect request after a jQuery Ajax call

然而,这是一个肮脏的黑客,经过多次挖掘我发现我认为是一个更好的解决方案 - 使用JSON。在这种情况下,您可以对ajax请求的所有响应都具有代码200,并且在响应的主体中,您添加某种JSON对象,然后您的ajax响应处理程序可以以适当的方式使用它。

答案 1 :(得分:6)

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

  

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

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

答案 2 :(得分:2)

我的问题原因是:

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

也许它有助于某人:)

答案 3 :(得分:-1)

不是要求Javascript代码处理302,最好在302事件中返回带有自定义错误代码+消息的500

答案 4 :(得分:-5)

function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}

答案 5 :(得分:-9)

最好的解决方案是:

使用任何对象示例

的属性设置变量
<html>
·
·
     <span url="http://www.google.com"></span>
·
·
</html>

$('.example').on('click', function(){
     $url = $(this).attr('url');

     $.get($url, function(data){ alert(data); })
})

如果url直接在js中进行设置,你会发现错误302,我不知道是因为原因发生了这个错误,但是如果你得到了一个属性的url,这个错误不是ocurre