在AJAX调用中,未遵循302

Joh*_*han 22 ajax jquery

我正在使用jQuery 1.6.2向同一域上的页面发出POST AJAX请求.该页面将302重定向到另一个页面.

现在,在我的本地计算机上工作正常,但在我们的生产服务器上,从未遵循重定向,并且在Chrome检查器中,该请求被称为"已取消".

如果我在不涉及javascript的情况下访问同一页面,一切正常,正如我所说,AJAX在我的本地机器上运行,但在生产服务器上运行.

有谁知道这会导致什么?

服务器之间存在一些差异(OS X,Apache2,PHP5.3.6,本地机器上的HTTP,Ubuntu,Lighttpd,PHP5.3.3,生产中的HTTPS),但对我来说没有任何区别应该有所不同.

Joh*_*han 13

结果是重定向代码中的错误导致重定向转到http://,而请求的页面是https://.这使得浏览器拒绝遵循重定向.

  • 那么你如何解决你的问题,就像我面对的一样. (2认同)

Cha*_*mal 6

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

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

以下与您的答案相关的问题.你可以从下面的链接找到答案.

在JavaScript中捕获302 FOUND

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

  • `xhr.status == 302`应该永远不会发生,因为302将由浏览器处理,然后只返回200或其他错误代码给JS,所以我认为这适得其反.我会删除-1但是因为你链接到其他问题.我将提供一个不同的答案. (7认同)
  • 浏览器不应该将302传递给JS,因为浏览器会透明地处理重定向,因此jQuery永远不会知道它被重定向.我不清楚这是否是所有浏览器,但是Chrome显然是这样做的,其他人也报道了Opera/FF. (5认同)
  • 顺便说一句,这段代码与@Strelok在这里发布的代码完全相同:http://stackoverflow.com/questions/373087/catching-302-found-in-javascript,投票率很低.答案是早一点. (2认同)