Javascript 404上的$http调用成功

Javascript 404上的$http调用成功,javascript,angularjs,ajax,promise,angular-promise,Javascript,Angularjs,Ajax,Promise,Angular Promise,我通过服务公开此功能: function getData(url) { return $http.get(url).then(function (response) { return response.data; }); } 如果通话成功,一切都很好——我得到了一个如预期般解决的承诺 如果我传入一个生成404的URL,我会得到: TypeError:无法读取未定义的属性“data” 在线:返回response.data 我可以在Chrome的开发者工具中看到,G

我通过服务公开此功能:

function getData(url) {
    return $http.get(url).then(function (response) {
        return response.data;
    });
}
如果通话成功,一切都很好——我得到了一个如预期般解决的承诺

如果我传入一个生成404的URL,我会得到:

TypeError:无法读取未定义的属性“data”

在线:
返回response.data

我可以在Chrome的开发者工具中看到,
GET
返回404

为什么Angular(v1.4.7,也尝试了v1.5.0)在出现错误时用
未定义的
调用我的successCallback

(我要做的是处理调用代码中的失败。)

编辑:@jcaron为我指出了正确的方向。问题似乎是此配置行(由另一个开发人员编写):

拦截器必须有设计缺陷:

function ErrorInterceptor($q, $window) {
    return {
        response: function (response) {
            return response;
        },
        responseError: function (response) {
            if (response.status === 500) {
                $window.location.href = '/error';
                return $q.reject(response);
            }
        }
    };
拦截器必须有设计缺陷

的确如此。如果拒绝状态不是500,则返回
未定义的
,以实现承诺。应该是

…
responseError: function (err) {
    if (err.status === 500) {
        $window.location.href = '/error';
    }
    return $q.reject(err); // always pass on rejection
}

在这里触发错误回调:也许代码中有什么不同?(假设从1.4.7版到1.4.8版没有太大变化)您是否可以使用进行测试,以确保它不是特定于您的代码…使用httpstat进行了尝试;同样的问题。我把我的代码复制粘贴到@OmriAharon的小提琴叉上;它在那里工作正常,但在我的环境中工作不正确!你是否有一个截取器,它可能在做一些奇怪的事情?
…
responseError: function (err) {
    if (err.status === 500) {
        $window.location.href = '/error';
    }
    return $q.reject(err); // always pass on rejection
}