在 AngularJS 中中止挂起的 ajax 请求

Posted

技术标签:

【中文标题】在 AngularJS 中中止挂起的 ajax 请求【英文标题】:Abort pending ajax request in AngularJS 【发布时间】:2015-01-02 11:29:31 【问题描述】:

如何中止 AngularJS 中待处理的 ajax 请求?我正在使用 Service 进行 ajax 调用,并且如果在同一路由上发出新请求,我希望中止所有待处理的请求。

这是我的服务:

myService.service('angService', function($http)

  this.getfromRemote=function(url)
    return $http.get(location+'/dev/apiv-1-0-2/'+url);
  
);

我在这里调用服务。在接下来运行之前,我想中止待处理的 ajax 请求。

angService.getfromRemote('paymentStatement/'+$scope.username)
                            .success(function(response)

)

【问题讨论】:

How to cancel an $http request in AngularJS?的可能重复 它不适合我 【参考方案1】:

要中止待处理的$http 请求,您可以将promise 传递给$http 请求的超时属性,然后调用resolve 中止请求。

myService.service('angService',function($http, $q)
    var pending = false;
    var deferred = $q.defer();

    this.getfromRemote=function(url)
        if (pending) 
           deferred.resolve();
           deferred = $q.defer();
        
        pending = true;
        return $http( 
           method: 'GET', 
           url: location+'/dev/apiv-1-0-2/'+url,
           timeout = deferred.promise;
        ).then(function(result) 
           pending = false;
           deferred = $q.defer();
           return result;
        , function(result) 
           pending = false;
           deferred = $q.defer();
           return result;
        );


    

);

【讨论】:

以上是关于在 AngularJS 中中止挂起的 ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 中 JQuery 停止和挂起的 ajax 请求

如何摆脱挂起的 ajax 调用并加载另一个页面

连接丢失后,ajax 请求在 chrome 中挂起

使用融合的 google api 和挂起的意图,更新位置

带有 QSharedMemory 的 IPC 和如果进程之一挂起的风险

如何使用 Flash Builder 4 在 Flex 4 中调试挂起/挂起的 Web 服务?