我们已将我们的身份验证委托给另一个域(窗口标识框架,联合身份验证设置)。现在,如果会话在ajax请求之前超时,服务器将请求重定向到认证服务器。由于它成为一个跨域调用,Ajax请求被浏览器取消。有没有办法,我可以在jQuery/JavaScript中检测到这一点?在ajax请求上检测跨域重定向
我检查了在这种情况下设置为0的xhr对象的status属性,但它是否是取消请求的一个很好的指示器? (我使用jQuery $就使Ajax请求)
我们已将我们的身份验证委托给另一个域(窗口标识框架,联合身份验证设置)。现在,如果会话在ajax请求之前超时,服务器将请求重定向到认证服务器。由于它成为一个跨域调用,Ajax请求被浏览器取消。有没有办法,我可以在jQuery/JavaScript中检测到这一点?在ajax请求上检测跨域重定向
我检查了在这种情况下设置为0的xhr对象的status属性,但它是否是取消请求的一个很好的指示器? (我使用jQuery $就使Ajax请求)
我也一直在寻找这个,并且发现很少的证据表明你想检测的是完美可检测。但是,我找到了一种方法来检测它发生的可能是。
这里是你的事件会发生什么事:
在您的错误回调中,请检查您的XMLHttpRequest
对象的readyState
字段。如果它是0(“UNSENT”),那么这意味着你的AJAX请求从未被发送过。
当然,它可能并不总是完全清楚为什么它没有发送。例如,用户可能只需拔掉他的网线。但是,如果您愿意假定网络运行正常,那么当您看到readyState == 0
时,由于跨域问题,请求也未被发送,因此可以合理假设。这意味着重定向发生了。
如果您正在使用jQuery,那么您可以检查jqXHR.readyState
。
只是为了确认,因为它不是很明确 - 我已经测试过了,不幸的是readyState如果拔掉网线,也会出现0,并且可能是出现其他网络错误,这意味着您无法区分网络错误和重定向。 – sam 2016-05-23 10:28:52
您可以检查此页:http://api.jquery.com/jQuery.ajax/
有一个错误的参数,其中如果请求失败,你可以捕捉。
错误(jqXHR,textStatus,errorThrown)
希望这会有所帮助。
这将如何帮助? – Starx 2012-07-20 03:43:56
只是为了清除你的问题。你想要的是检查你的认证服务器,如果请求是从jQuery或本地JavaScript? – jvicente 2012-07-20 03:52:43
@jvicente你的建议是类似于我在做什么,我有一个全局错误处理程序(即ajaxError(...)而不是本地错误处理程序)incase我附加本地错误处理程序errorThrown参数包含值“找不到”并且textstatus的值为“error”。对于这些值,我不认为我认为请求失败是因为浏览器终止了请求。 – Sush 2012-07-22 01:03:42
为什么要这样做,结果如果你知道你正在执行的URL请求?你不能只在执行ajax请求之前比较当前域和url *吗? – zerkms 2012-07-20 03:33:52
因为它重定向到ajax请求上的一个不同的域,我不知道在哪里检查url,如果jquery确实在重定向上引发任何事件,那么是的,我可以在那里添加该代码。 – Sush 2012-07-22 01:35:06
这里是另一种方式,我可以短语的问题,a)向您的域名ajax请求b)请求“可能”重定向到基于certian conditons的另一个域c)如果它确实重定向,浏览器阻止请求并取消它(因为它是一个跨域调用)c)引发错误事件..所以,问题是我如何检测到请求失败,因为跨域调用? – Sush 2012-07-22 01:47:46