0

我在我的应用程序中添加了一个“加载屏幕”。正如在这篇文章中发现的那样:'点击'

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

$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":{}}'
4

1 回答 1

3

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

在以下代码中:

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);
        };
    });
于 2013-10-18T12:30:43.830 回答