我有一个角度应用程序,它使用$ http服务从远程服务器获取数据。在某些情况下,我需要为每个请求附加一个自定义标头值,我想使用facilities provided by the framework来完成此任务。
出于安全原因,要添加的标头值是在角度应用程序的Web服务器上计算的,这意味着requestTransform必须首先向应用程序Web服务器发出请求以获取标头值并将其添加到$ http请求中从远程服务器获取数据。
是否可以将requestTransform用于此任务?或者,需要在服务中包含我的数据获取调用,该服务在对远程服务器进行$ http调用之前从应用程序Web服务器获取标头值。
答案 0 :(得分:2)
不,转换请求/响应函数是同步的,因此不能用于您的特定情况。幸运的是,请求拦截器最近被添加到AngularJS的1.1.x
分支。这些拦截器是基于承诺的,因此您可以在实际调用之前使用它们进行异步处理。
答案 1 :(得分:1)
如果您正在全局设置Ajax转换函数(通过$httpProvider.defaults.transformRequest
)并且您的转换函数也使用$ http来执行预检请求,那么您可能会陷入无限循环,因为每个预检请求将以递归方式调用另一个预检请求。
因此,唯一的选择是仅在您的特定$ http服务上设置请求转换功能。
现在,因为trnf。函数同步执行(参见https://github.com/angular/angular.js/blob/master/src/ng/http.js#L671)您可能希望确保您的预检请求也同步执行,但由于您无法使用$ http执行此操作,您唯一的选择是使用其他形式的预检ajax请求(使用jQuery.ajax()或本机使用普通JS)。