javascript - 使用 jQuery 的 $.ajax() 或 $.getScript() 方法时有什么方法可以识别重定向吗?

标签 javascript jquery redirect httpwebrequest jsonp

在我公司的在线应用程序中,我们设置了一个基于 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/

相关文章:

javascript - jQuery 悬停在一个克隆的元素上

javascript - 我如何手动将点击发送到谷歌分析?

javascript - 意外的 JS/jQuery 循环行为

unit-testing - 测试重定向 CakePHP 2.0

javascript - 哪种 JavaScript 压缩器(粉碎器)与 Google 用于其 JavaScript API 的压缩器执行相同的操作?

javascript - 在 IE 8 中单击标签时触发单击输入

javascript - 获取jQuery中隐藏字段的值

javascript - 使用 jQuery 从 iframe 中的 url 获取标题字符串?

php - 前端 Controller 插件中的 Zend Framework 重定向导致重定向循环

.htaccess - Cloudflare 灵活的 SSL 和重定向