【问题标题】:How to know when a page is fully loaded (including its AJAX requests)如何知道页面何时完全加载(包括其 AJAX 请求)
【发布时间】:2017-07-21 23:09:53
【问题描述】:

在我目前的情况下,我正在使用 $http 拦截器来捕获响应错误并显示一条简单的消息,让用户知道出现了问题。 但是现在我想对来自加载页面期间发送的请求或由于用户本身的操作(例如按下按钮,输入字段......)而发送的请求的错误进行区分。

我想要的 $httpInterceptor 示例:

return {
   responseError: function (response) {
      // IF THE REQUEST IS FROM A PAGE LOAD
         // DO SOMETHING
      // IF THE REQUEST IS NOT FROM A PAGE LOAD
         // DO SOMETHING ELSE
      return $q.reject(response);
   }
};

为了更清楚一点:

案例 1:用户正在等待页面加载:

  • 请求 1 已发送
  • 请求 2 已发送
  • 发送请求 3
    • REQ 4 在 REQ 3 响应后发送
      • REQ 5 在 REQ 4 响应后发送
  • 发送请求 6
    • REQ 7 在 REQ 6 响应后发送

以上所有请求都是页面加载的一部分,如果其中一个返回错误,它应该有特定的行为。

不是因为页面加载而触发的请求:

案例 2:用户按下按钮:

  • 发送请求 1
    • REQ 2 在 REQ 1 响应后发送

这些请求不是页面加载的一部分,如果出现错误,应该采取不同的行动。

有什么办法可以在这两种情况下有所不同吗? 由于我的项目很大,我不想更改每个 $http 请求的代码来识别它是否来自页面加载,所以这不是我的解决方案。

【问题讨论】:

标签: javascript angularjs ajax angular-http-interceptors


【解决方案1】:

您可以创建某种类型或正则表达式,并测试是否来自期望的 url 并做出选择。

.service('RequestsInterceptor', [
'$q',
function(
  $q,
  ) {
    var UNAUTHORIZED_CODE = 401;
    var FORBIDDEN_CODE = 403;
    var NOTFOUND_CODE = 404;
    var INTERNAL_ERROR = 500;

        this.request = function(config) {
            //logic to send
            return config || $q.when(config);
        };
        this.responseError = function(rejection) {

            console.log(rejection.config.url)

            var apiPattern = /\/api\//;

            if(apiPattern.test(rejection.config.url)) {
                //do your logic when url are api
            }else{
              //do your logic when url are templates
            }
            return $q.reject(rejection);
        };
    }
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2017-09-27
    • 2023-03-10
    • 1970-01-01
    • 2023-01-05
    • 2019-07-17
    • 2013-01-12
    • 2013-09-27
    相关资源
    最近更新 更多