检测ajax请求上的跨域重定向

Sus*_*ush 5 javascript ajax jquery

我们将身份验证委托给另一个域(Window Identify框架,联合身份验证设置).现在,如果会话在ajax请求之前超时,则服务器会将请求重定向到身份验证服务器.由于它成为跨域调用,因此浏览器会取消ajax请求.有没有办法在jquery/javascript中检测到这个?

我检查了xhr对象的status属性,在这种情况下设置为0,但它是取消请求的一个很好的指标吗?(我使用jquery $ .ajax来发出ajax请求)

Sha*_*rky 4

我也一直在研究这个问题,但几乎没有发现任何证据表明你想要检测的东西是完全可以检测到的。然而,我找到了一种方法来检测它是否可能发生。

以下是您的活动所发生的情况:

  1. JavaScript 代码发起请求。
  2. 浏览器向服务器发出请求。
  3. 服务器通过重定向进行应答。
  4. 浏览器确定新位置是​​不同的域。
  5. 浏览器取消请求(以确保您的安全)。
  6. 浏览器报告(不完全真实)请求从未发送。

在错误回调中,检查XMLHttpRequest对象的readyState字段。如果为 0(“UNSENT”),则表示您的 AJAX 请求从未发送过。

当然,可能并不总是完全清楚为什么没有发送。例如,用户可能只是拔掉了网络电缆。但是,如果您愿意假设网络运行完美,那么当您看到 时readyState == 0,也可以合理地假设由于跨域问题而未发送请求。这意味着重定向发生了。

如果您正在使用 jQuery,那么您可以jqXHR.readyState改为检查。