在我公司的在线应用程序中,我们设置了一个基于 JSONP 的 API,它返回我正在开发的小书签所使用的一些数据。这是我设置的一个快速测试页面,它使用 jQuery 的 $.ajax()
方法访问 API URL:
http://troy.onespot.com/static/3915/index.html
如果您使用 Firebug 的“网络”选项卡(或类似选项)查看请求,您会发现所发生的情况是 URL 已成功请求,但由于我们的应用程序会将任何未经授权的用户重定向到登录页面,因此浏览器也会请求登录页面,并且看似将其解释为 JavaScript。这不可避免地会导致异常,因为登录页面是 HTML,而不是 JavaScript。
基本上,我正在寻找任何类型的 Hook 来确定请求何时导致重定向 - 某种方式来确定 URL 是否解析为 JSONP 响应(这将执行我在书签脚本中预定义的方法) )或者是否导致重定向。我尝试将 $.ajax()
方法包装在 try {} catch(e) {}
block 中,但这并没有捕获异常,我假设因为请求成功了,只是没有将登录页面解析为 JavaScript。是否有任何地方我可以使用 try {} catch(e) {}
block ,或 $.ajax()
的任何属性,让我可以磨练异常或以其他方式确定我已被重定向?
我实际上怀疑这是可能的,因为 $.getScript()
(或 $.ajax()
的等效设置)只是动态加载脚本,并且可以不检查响应 header ,因为它是跨域的并且不是真正的 AJAX:
http://api.jquery.com/jQuery.getScript/
我的替代方案是在一段时间内触发 $.ajax()
,直到我收到 JSONP 回调或没有收到,在后一种情况下,假设用户未登录并提示他们这样做。不过,我不喜欢这种方法,因为它会导致对应用服务器产生大量不必要的请求,同时还会堆积 JavaScript 异常。
感谢您的建议!
最佳答案
在 jQuery 中使用 AJAX 方法时,应该在请求中设置“X-Requested-By: XMLHttpRequest” header 。
我最初的想法是,您可以检查并查看该 header 是否在服务器端设置,如果是,则不发出重定向,而是发送回一些带有重定向 URL 的 JSON,并让客户端 JS 查找响应中存在该重定向,服务器仅在不是 AJAXy 调用时发出重定向。
关于javascript - 使用 jQuery 的 $.ajax() 或 $.getScript() 方法时有什么方法可以识别重定向吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481085/