【发布时间】:2016-03-11 23:10:13
【问题描述】:
我目前正在编写一个与 flickr API 通信的 Angular 应用程序。为了利用来自 flickr 的响应,您需要定义一个 jsonFlickrFeed 回调函数。请看answer here for details on how this works
在我的 Angular 应用程序中一切正常。我正在收到响应并在屏幕上显示数据。
但是,为了改进用户体验,如果数据未加载,我想向用户显示一条错误消息,但我不知道如何显示此消息。我认为它会工作的方式总是以 API 的工作方式记录错误。请在下面查看我的尝试:
app.controller('testCtrl', function (getFlickrData) {
var testCtrl = this;
this.loading = true;
this.error = false;
//call to get the data from Flickr
getFlickrData.getData().catch(function (err) {
//show error
console.log(err)
testCtrl.error = true;
})
.finally(function () {
// Hide loading spinner whether our call succeeded or failed.
testCtrl.loading = false;
});
//API requires jsonFlickrFeed callback function
jsonFlickrFeed = function(data){
console.log(data);
}
});
这是我用来向 Flickr 发出 GET 请求的工厂
app.factory('getFlickrData', function($http){
return{
getData: function(){
return $http.jsonp('https://api.flickr.com/services/feeds/photos_public.gne?tagmode=all&format=json');
}
}
});
控制台中记录的错误如下所示:
{data: undefined, status: 404, config: Object, statusText: "error"}
最后是始终显示的 html,即使内容加载成功。
<div ng-show="testCtrl.error" class="error">
<p>Sorry but there has been an error with loading content. Please try again soon.</p>
</div>
我想总结一下我的问题是如何检查回调的成功/失败(可能)
这是一个jsfiddle,它可能会让我更容易看到我要解决的问题
【问题讨论】:
-
这样的事情有帮助吗? jsfiddle.net/zkqrcbxn/1
-
很遗憾没有,即使成功了仍然会报错,因为回调之前有错误
-
ng-show="ctrl.error" 应该是 ng-show="testCtrl.error == true" 吗?
-
@KennyE 感谢您的建议。不幸的是,不是这样,我更改了问题的
var名称,ng-show将显示它是否为真,您不必声明condition === true。如果您尝试代码并在控制台中检查err,您将了解问题 -
testCtrl 也需要在 $scope 对象上。惯例是将 $scope 注入控制器,然后执行 $scope.testCtrl.error = true。你有没有在控制器中使用 $scope 的原因?
标签: javascript angularjs ajax callback