0

我有一个角度应用程序,它使用 $http 服务从远程服务器获取数据。在某些情况下,我需要为每个请求附加一个自定义标头值,并且我想使用框架提供的工具来完成此操作。

出于安全原因,要添加的标头值是在 Angular 应用程序的 Web 服务器上计算的,这意味着 requestTransform 必须首先向应用程序 Web 服务器发出请求以获取标头值并将其添加到 $http 请求中获取数据远程服务器。

是否可以将 requestTransform 用于此任务?或者,需要将我的数据获取调用包装在一个服务中,该服务在对远程服务器进行 $http 调用之前从应用程序 Web 服务器获取标头值。

4

2 回答 2

2

不,转换请求/响应函数是同步的,因此不能用于您的特定情况。幸运的是,请求拦截器最近被添加到1.1.xAngularJS 的分支中。这些拦截器是基于承诺的,因此您可以在实际调用之前使用它们进行异步处理。

http://code.angularjs.org/1.1.4/docs/api/ng.$http的“拦截器”部分中的更多信息

于 2013-05-20T16:51:39.313 回答
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)。

于 2013-05-20T16:52:02.890 回答