在JavaScript中捕获302 FOUND

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

所接受的答案是不起作用的。 我发表了一个评论,其中提到一个问题的链接,描述了一个黑客可以解决浏览器透明处理302的问题:

如何在jQuery Ajax调用之后pipe理redirect请求

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

我不这么认为。 W3C表示,必须透明地遵循包含302的某些状态代码的HTTPredirect。 引用如下:

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

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

在我的问题原因是:

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

也许它有助于某人:)

而不是要求JavaScript代码来处理302,最好返回一个500与自定义错误代码+消息事件302

function doAjaxCall() { $.ajaxSetup({complete: onRequestCompleted}); $.get(yourUrl,yourData,yourCallback); } function onRequestCompleted(xhr,textStatus) { if (xhr.status == 302) { location.href = xhr.getResponseHeader("Location"); } } 

最好的解决办法是:

使用任何对象示例的属性设置variables

 <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,这个错误不会发生