Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularJS 1.0.x中所有http请求的拦截器_Javascript_Angularjs_Interceptor - Fatal编程技术网

Javascript angularJS 1.0.x中所有http请求的拦截器

Javascript angularJS 1.0.x中所有http请求的拦截器,javascript,angularjs,interceptor,Javascript,Angularjs,Interceptor,我目前在一个angular应用程序中工作,我想为我的应用程序的所有http请求编写一个拦截器,该拦截器依次调用一个服务,以了解单点登录会话是否仍处于活动状态,如果它未处于活动状态,我应该路由到我的单点登录,然后为用户请求加载下一页或结果提供服务。我不知道如何在AngularJS中编写拦截器,也不知道在将页面重定向到单点登录时如何保存用户请求 我目前正在使用angularjs 1.0.2,我看到1.0.2文档中有响应侦听器,但没有请求侦听器。在Angular 1.0.2中是否有为http调用编写请

我目前在一个angular应用程序中工作,我想为我的应用程序的所有http请求编写一个拦截器,该拦截器依次调用一个服务,以了解单点登录会话是否仍处于活动状态,如果它未处于活动状态,我应该路由到我的单点登录,然后为用户请求加载下一页或结果提供服务。我不知道如何在AngularJS中编写拦截器,也不知道在将页面重定向到单点登录时如何保存用户请求


我目前正在使用angularjs 1.0.2,我看到1.0.2文档中有响应侦听器,但没有请求侦听器。在Angular 1.0.2中是否有为http调用编写请求拦截器的解决方法?在官方文档中,有一个很好的例子,适用于当前稳定的1.2.0

[.$http][1](页面顶部四分之一,搜索拦截器)


您可以将当前时间存储为lastRequestTimestamp,而不是计算pendingRequests。如果您将其与全局运行的计时器相结合,您可以检测上次请求的时间。

您可以非常轻松地使用拦截器

这是一个样本

var mydevices = angular.module('deviceDetails', ['ui.bootstrap', 'tags-input'])

mydevices.config(function ($httpProvider) {
$httpProvider.interceptors.push(function($q) {
      return {
       'request': function(config) {
           if (config.method === 'GET' && config.url.contains("/rest/")) {
               var sep = config.url.indexOf('?') === -1 ? '?' : '&';
               config.url = config.url + sep + 'cacheSlayer=' + new Date().getTime();
           }
           console.log(config.url);
           return config || $q.when(config);
        }
      };
    });
});
上面的示例修改了所有/rest/URL的URL


希望这能有所帮助

我使用的版本是1.0.2,在该版本中,$httpProvider中没有拦截器阵列。你有版本1.0.2的例子吗在transformRequest中,我真的看不到获取url的方法,因为在我的用例中,如果它从其他服务检索到true,我想路由到实际的url到另一个url。请让我知道这方面是否有任何工作?嗨,阿扬,恐怕我在这里无法进一步帮助你。如果答案对您有帮助,您应该将其标记为已回答(绿色复选标记),并用您从这些评论中提供/获得的所有新信息提出一个新问题。谢谢。啊,请别忘了给我一些到目前为止你掌握的代码。
var mydevices = angular.module('deviceDetails', ['ui.bootstrap', 'tags-input'])

mydevices.config(function ($httpProvider) {
$httpProvider.interceptors.push(function($q) {
      return {
       'request': function(config) {
           if (config.method === 'GET' && config.url.contains("/rest/")) {
               var sep = config.url.indexOf('?') === -1 ? '?' : '&';
               config.url = config.url + sep + 'cacheSlayer=' + new Date().getTime();
           }
           console.log(config.url);
           return config || $q.when(config);
        }
      };
    });
});