Catching 302 FOUND in JavaScript
我使用jQuery向我的服务器发出一个AJAX POST请求,该请求可以返回状态为302的HTTP响应。然后,JavaScript只是向此URL发送GET请求,而我想在此响应中将用户重定向到URL。 这可能吗?
由于给出的原因,接受的答案不起作用。我发布了一条评论,其中包含一个问题的链接,该问题描述了解决浏览器透明处理302问题的黑客攻击:
如何在jQuery Ajax调用之后管理重定向请求
然而,这是一个肮脏的黑客,经过多次挖掘我发现我认为是一个更好的解决方案 - 使用JSON。在这种情况下,您可以对ajax请求的所有响应都具有代码200,并且在响应的主体中,您添加某种JSON对象,然后您的ajax响应处理程序可以以适当的方式使用它。
我不这么认为。 W3C表示必须透明地遵循包含302的某些状态代码的HTTP重定向。引用如下:
If the response is an HTTP redirect (status code 301, 302, 303 or
307), then it MUST be transparently followed (unless it violates
security or infinite loop precautions). Any other error (including a
401) MUST cause the object to use that error page as the response.
作为一项实验,我尝试从各种浏览器(Firefox 3.5,Chrome,IE8,IE7,IE6)向服务器发出Ajax请求,提供302状态代码,并在浏览器的请求对象中显示状态。在每种情况下,它都显示为200。
在我的问题中,原因是:
我正在使用localhost / Home / Test地址来测试页面。但是ajax请求代码使用127.0.0.1/Home/AjaxRequest来获取url参数。当网址不同时,会发生此错误。
也许它有助于某人:)
而不是要求Javascript代码处理302,最好在302的事件上返回带有自定义错误代码+消息的500
1 2 3 4 5 6 7 8 9 10 | function doAjaxCall() { $.ajaxSetup({complete: onRequestCompleted}); $.get(yourUrl,yourData,yourCallback); } function onRequestCompleted(xhr,textStatus) { if (xhr.status == 302) { location.href = xhr.getResponseHeader("Location"); } } |
最好的解决方案是:
使用任何对象示例的属性设置变量
1 2 3 4 5 6 7 8 9 10 11 12 13 | <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