【问题标题】:angular callback api add error message if fails如果失败,角度回调 api 添加错误消息
【发布时间】: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


【解决方案1】:

希望这不会再让你失望了:)

根据$http中的AngularJS API,这里没有finally,只能使用成功和错误。

app.controller('testCtrl', function (getFlickrData) {
   var testCtrl = this;
   this.loading = true;
   this.error = false;

   getFlickrData.getData().success(function (data) {
       console.log(data);
       testCtrl.loading = false;
   })
   .error(function () {
     testCtrl.loading = false;
     testCtrl.error = true;
   });

})
.factory('getFlickrData', function($http){
    return{
        data:{},
        getData: function(){
            var self = this;
            return $http.jsonp("https://api.flickr.com/services/feeds/photos_public.gne?tagmode=all&format=json&jsoncallback=JSON_CALLBACK");
        }
    }
});

【讨论】:

  • 我认为这行不通。在控制台中没有收到错误消息吗?
  • 抱歉,应该修复
  • 我还是不这么认为。如果您查看控制台,您将看到 err 消息仍然显示。如果可能的话,我需要检查回调的success
  • 现在试试应该没问题
  • 那行得通。您是否介意更详细地解释它在答案中的工作原理。一些额外的解释会很棒
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2022-01-10
  • 2021-06-10
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多