Angular.js:CORS HttpInterceptor透明地将$ http.get转换为$ http.jsonp请求

时间:2014-05-14 23:00:03

标签: json angularjs cross-domain jsonp cors

我一直在研究是否可以创建我的Chrome Plugin的基于网络的版本 现在它完全依赖于Trakt.TV的JSON API。

根据angular的文档,可以拦截多个级别的HTTP请求,一个是HTTP后端本身(主要用于测试),另一个是HTTPInterceptor.get

基本思想是通过http://json2jsonp.com/将调用包装到Trakt.TV的JSONP api中,并让它们透明地返回以解决跨站点脚本限制。这不仅对我自己的项目非常有用,而且对于很多其他人也会对同样的问题感到畏惧(因此我会在完成后释放模块,但我想要正确地完成它)

基础知识应该很简单

  • 在正确的级别挂钩$ http.get请求
  • 覆盖原始请求
  • 取消已设置的可选其他请求
  • 通过$ http.jsonp(http://json2jsonp.com/
  • 挂钩
  • 完成后返回原始承诺的成功/失败

问题

  • 有人建造过这样的东西吗? (Github搜索没有透露任何内容)
  • 您是否建议使用HTTPBackend或HTTPInterceptor?

1 个答案:

答案 0 :(得分:0)

为什么你不能只使用jsonp辅助函数? httpBakend是一个假冒后端服务器的模拟服务,不用于实时代码。如果url包含你要过滤的名称,那么http拦截器会做你想要的只需要将回调函数名称附加到你的请求,然后在响应拦截器中你必须将响应传递给回调函数,这样json就可以了评估。请注意,除非您只是打电话给电视服务,否则拦截器将检查每个请求makde的角度是不是非常有效。 就像我之前所说的更好的方法是使用$ http.jsonp函数

https://docs.angularjs.org/api/ng/service/ $ HTTP#JSONP

关于拦截器的一个词,他们需要将它们定义为服务,然后在应用程序配置期间传递给HttpProvider。