在Angular中处理null JSON响应

时间:2016-03-02 07:11:06

标签: angularjs json

这是我获得JSON响应的代码片段:

app.controller('apiController', function($scope, $http) {
$http.get("http://api.openweathermap.org/data/2.5/forecast/daily?q=Kansas+City&mode=json&units=metric&cnt=10&appid=f6b7081abd94e66273817ed6b5ce95c7").then(function(response) {
    $scope.myData = response.data.list;
});
});

处理空/垃圾/空JSON响应时,有哪些最佳实践?

4 个答案:

答案 0 :(得分:2)

通过使用AngularJS $httpProvider.interceptors,我们可以全局处理请求和响应。这里我只是为响应添加代码。 首先创建一个angular factory,例如

myModule.factory('myResponseInterceptors', function ($q) {
    return {
        response: function (response) {
            // do something on success
        if(response.data == null)
       {
        // Do what ever you want to do 
       }
            return response;
        },
        responseError: function (response) {
            // do something on error
            return $q.reject(response);
        }
    };
});

并将此工厂添加到主模块$httpProvider部分

上的config
myModule.config(function ($httpProvider) {
    $httpProvider.interceptors.push('myResponseInterceptors');
});

AngularJs httpPromise响应对象具有以下属性
数据 - {string | Object} - 使用转换函数转换的响应体 状态 - {number} - 响应的HTTP状态代码 标题 - {function([headerName])} - 标题获取功能。
config - {Object} - 用于生成请求的配置对象 statusText - {string} - 响应的HTTP状态文本。

答案 1 :(得分:1)

很简单,就像这样:

app.controller('apiController', function($scope, $http) {
$http.get("http://api.openweathermap.org/data/2.5/forecast/daily?q=Kansas+City&mode=json&units=metric&cnt=10&appid=f6b7081abd94e66273817ed6b5ce95c7").then(function(response) {
    if(response.data){
        $scope.myData = response.data.list;
    }else{
        // TODO: your data is null or undefined
    }
});
});

答案 2 :(得分:1)

我不知道这是否是最佳答案,但您可以通过以下方式处理,

angular.isUndefined(val) || val === null

app.controller('apiController', function($scope, $http) {
   $http.get("http://api.openweathermap.org/data/2.5/forecast/dailyq=Kansas+City&mode=json&units=metric&cnt=10&appid=f6b7081abd94e66273817ed6b5ce95c7").then(function(response) {
   $scope.myData = response.data.list;
   if(angular.isUndefined($scope.myData) || $scope.myData === null)
   {
     //Type an user friendly error msg for the end user and show on view
      $scope.errorMsg = "Sorry...the list is empty".
     // handle hide and show of this error msg whenever $scope.mydata is undefined or null.
   }
});
});

答案 3 :(得分:1)

添加此检查

if(response.data) {
  if(response.data.list) {
    $scope.myData=response.data.list;
  }
}