这是我获得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响应时,有哪些最佳实践?
答案 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;
}
}