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

时间:2012-07-20 03:32:21

标签: javascript ajax jquery

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

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

2 个答案:

答案 0 :(得分:4)

我也一直在研究这个问题,并且发现很少有证据表明您想要检测到的是完全可检测到的。但是,我找到了一种方法来检测可能发生了。

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

      
  1. JavaScript代码启动请求。
  2.   
  3. 浏览器向服务器发出请求。
  4.   
  5. 服务器以重定向回答。
  6.   
  7. 浏览器确定新位置是​​不同的域。
  8.   
  9. 浏览器取消请求(为了保证您的安全)。
  10.   
  11. 浏览器报告(并非完全如实)请求从未发送过。
  12. 在错误回调中,检查XMLHttpRequest对象的readyState字段。如果它为0(“UNSENT”),则表示您的AJAX请求从未发送过。

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

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

答案 1 :(得分:0)

您可以查看此页面:http://api.jquery.com/jQuery.ajax/

如果请求失败,您可以捕获一个错误参数。

错误(jqXHR,textStatus,errorThrown)

希望这会有所帮助。