【问题标题】:$http error callback does not work in combination with httpProvider responseInterceptor$http 错误回调不能与 httpProvider responseInterceptor 结合使用
【发布时间】:2013-10-18 09:18:40
【问题描述】:

我在我的应用程序中添加了一个“加载屏幕”。如在这篇文章中找到:'Click'

现在我遇到的问题是所有 $http 请求都会导致“成功”回调。即使 url 不存在。

$http.post("this doesnt even exist", { })
.success(function (data, status, headers, config) {
    alert("success"); //this callback is called
})
.error(function (data, status, headers, config) {
    alert("error"); //never called
});

当我禁用“responseInterceptor”时,一切正常。 (异常,未找到,参数错误->都导致错误回调)

我正在使用 .NET Web 服务从中获取数据。

成功回调中的参数值

data: ''
status: 0
headers: 'function(name) { ... }'
config: JSON.stringify(config)  '{"method":"POST","url":"this doesnt even exist","data":{}}'

【问题讨论】:

  • 我正在使用“AngularJS v1.0.8”(最新稳定版本)
  • 请提供HttpInterceptor的代码
  • @tschiela HttpInterceptor 的代码是链接中提供者的精确副本

标签: javascript ajax angularjs callback


【解决方案1】:

这是因为您链接到的响应拦截器“吞下了”错误。

在以下代码中:

return promise.then(hide, hide);

第一个hide是成功回调,第二个是错误回调。

hide 函数本身在所有情况下都以return r; 结尾,这意味着它将返回响应。

为了让您的$http.post 知道存在错误,响应拦截器需要将承诺返回为被拒绝:return $q.reject(reason);

这些方面的东西应该会起作用,或者至少可以提供进一步的指导(请注意,我无法对其进行测试):

$httpProvider.responseInterceptors.push(function ($q) {
        return function (promise) {
            numLoadings++;
            loadingScreen.show();

            var hide = function () {
                if (!(--numLoadings)) loadingScreen.hide();
            };

            var success = function (response) {
                hide();
                return response;
            };

            var error = function (reason) {
                hide();
                return $q.reject(reason);
            };

            return promise.then(success, error);
        };
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2022-01-09
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多