【问题标题】:How to display timeout error in angular js $http calls?如何在 Angular js $http 调用中显示超时错误?
【发布时间】:2015-02-01 03:12:24
【问题描述】:

我在 Angular js 中使用 $http 进行 ajax 调用。我已经在其中实现了超时。但是如果连接超时,我想向用户显示一条错误消息。以下是代码..

$http({
            method: 'POST',
            url: 'Link to be called',
            data: $.param({ 
                    key:Apikey,
                    id:cpnId
                }),
            timeout : 5000, 
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).success(function(result){
               alert(result);
            }).error(function(data){
              alert(data);
            });

如果连接超时,有什么方法可以显示用户。 有什么办法可以在一个地方进行配置吗?

【问题讨论】:

    标签: javascript angularjs timeout ionic-framework


    【解决方案1】:

    您可以使用角度拦截器来实现这一点。

    $httpProvider.responseInterceptors
    .push(['$q', '$injector','$rootScope', function ( $q, $injector,$rootScope) {
     return function (promise) {
        return promise.then(function (response) {
            return response;
        }, function (response) {
            console.log(response); // response status
            return $q.reject(response);
        });
      };
     }]);
    }]);
    

    More info see this link

    【讨论】:

      【解决方案2】:

      如果你想在每个请求的连接超时时做一些事情,你可以使用拦截器(全局超时参数不起作用):

      // loading for each http request
      app.config(function ($httpProvider) {
          $httpProvider.interceptors.push(function ($rootScope, $q) {
              return {
                  request: function (config) {
                      config.timeout = 1000;
                      return config;
                  },
                  responseError: function (rejection) {
                      switch (rejection.status){
                          case 408 :
                              console.log('connection timed out');
                              break;
                      }
                      return $q.reject(rejection);
                  }
              }
          })
      })
      

      【讨论】:

      • 你好,我在请求超时时得到了rejection.status == 0,其他网络错误状态也是0
      • 使用 Angular 1.5.11 我得到状态码 -1,任何想法我在哪里可以找到关于这个值的官方文档?
      【解决方案3】:

      您只需要检查响应状态即可:

      }).error(function(data, status, header, config) {
            if (status === 408) {
                console.log("Error - " + status + ", Response Timeout.");
            } 
      
      });
      

      关于全局 HTTP 超时,看看这个answer

      【讨论】:

      • 这不是一个好的答案。你从哪里得到408?你不能假设超时会导致状态被传递,即状态可能是 0。
      • 这是一个错误的答案。状态码将不等于 408。
      【解决方案4】:

      试试这个博客页面:http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS 它有一个完整的角度运行示例,可以解决您的问题。

      【讨论】:

      • 最好给出一些解释并提供更多信息的链接。这样在链接失效时会很有帮助。
      • 这不是一个很好的例子,因为在调用者代码中设置了timedOut,仍然不知道如何检测真正的http超时发生的时间。
      • 这是一个很好的答案。无论如何,正在寻找的超时角度总是指调用者代码,所以我不知道@user3285954 在说什么。此示例演示了使用 promise 作为超时值,您可以在其中插入额外的数据来跟踪哪个超时被触发。不错。
      • 一个缺陷:这个答案应该使用 $timeout 而不是 setTimeout
      猜你喜欢
      • 1970-01-01
      • 2019-12-26
      • 2019-05-02
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2011-12-25
      • 2015-02-06
      • 1970-01-01
      相关资源
      最近更新 更多