Javascript 代码未捕获angularjs$http请求中的404错误
我正试图在一年前编写的angularjs应用程序中添加一些错误处理。对于一些RESTAPI调用,后端返回一个404,我想通过简单地返回一个空列表/数组来静默地修复它。但我无法捕获404错误,我不明白它为什么不起作用 我正在跟踪文档,我希望Javascript 代码未捕获angularjs$http请求中的404错误,javascript,json,angularjs,rest,http,Javascript,Json,Angularjs,Rest,Http,我正试图在一年前编写的angularjs应用程序中添加一些错误处理。对于一些RESTAPI调用,后端返回一个404,我想通过简单地返回一个空列表/数组来静默地修复它。但我无法捕获404错误,我不明白它为什么不起作用 我正在跟踪文档,我希望errorCallback的response是一个具有status属性的对象。相反,它有一个SyntaxError构造函数,其属性名为fileName、lineNumber、columnNumber和message。该消息是一个JSON.parse错误 现在我可
errorCallback
的response
是一个具有status
属性的对象。相反,它有一个SyntaxError构造函数,其属性名为fileName、lineNumber、columnNumber和message。该消息是一个JSON.parse错误
现在我可以理解为什么会有JSON解析错误:没有数据!但是响应状态正在丢失,我的代码无法区分404和其他我不想静默修复的错误
我错过了什么?记录在哪里?这些有角度的文档似乎不正确——除非我读错了
$http({
method: 'GET',
url: myRestApiUri
})
.then(
function successCallback( response ) {
handlers.success(response);
},
function errorCallback( response ) {
if( response.status === 404 ) {
handlers.success( [] );
}
else {
handlers.error(response);
}
}
)
编辑:收到一些反馈后,我意识到我使用的是angular的旧版本。所以我稍微修改了我的问题:angular的最新(或任何更新的)版本是否正确地实现了http错误捕获?我不想安装新的angular并重新编写API更改代码,结果发现新的angular也有同样的问题。当您直接在浏览器中调用时,会得到什么响应?比如:“您使用的angular版本是什么,而文档引用的版本是什么?这让我想起了过去,文档默认为最新版本,而我使用的是一个旧版本,其处理方式有所不同。@Charlie H,响应正文是“未找到”“。因此,JSON.parse对此不屑一顾。我的目标是捕获http错误,而不是json解析错误。@ste2425,捕捉得好。我使用的是1.3,它使用不同的签名
函数(数据、状态、标题、配置)
定义回调。但即便如此,核心问题还是一样。我希望看到status参数的值为404。但是,数据参数是一个SyntaxError对象。我想在angular尝试解析服务器的错误文本之前捕获404,就好像它是JSON一样。Dang,我一年前在1.4中遇到了这个问题,但我没有时间调查它,不得不继续新的项目。现在我使用1.5,仍然是同样的问题,尝试解析404响应并给出错误