In an AJAX call, 302 is not followed
我正在使用jQuery 1.6.2向同一域上的页面发出POST AJAX请求。 该页面将302重定向到另一个页面。
现在,在我的本地计算机上工作正常,但在我们的生产服务器上,从未遵循重定向,并且在Chrome检查器中,该请求被称为"已取消"。
如果我在不涉及javascript的情况下访问同一页面,一切正常,正如我所说,AJAX可以在我的本地机器上运行,但不能在生产服务器上运行。
有谁知道这会导致什么?
服务器之间存在一些差异(OS X,Apache2,PHP5.3.6,本地计算机上的HTTP,Ubuntu,Lighttpd,PHP5.3.3,生产中的HTTPS),但对我来说没有任何区别应该有所不同。
结果是重定向代码中的错误导致重定向转到http://,而请求的页面是https://。这使得浏览器拒绝遵循重定向。
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"); } } |
以下与您的答案相关的问题。你可以从下面的链接找到答案。
在JavaScript中捕获302 FOUND
如何在jQuery Ajax调用之后管理重定向请求
我认为这是服务器端问题,而不是客户端问题。浏览器在
我意识到我正在使用相对路径,例如
您必须确保
根据这个答案:https://stackoverflow.com/a/8752354/698289我发现以下代码非常有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $('body').ajaxComplete(function (e, xhr, settings) { if (xhr.status == 200) { var redirect = null; try { redirect = $.parseJSON(xhr.responseText).redirect; if (redirect) { window.location.href = redirect; } } catch (e) { return; } } }); |
然后你只需提供如下的JSON:
1 | {redirect: '/redirect/to/this/path'} |
请注意