我有以下代码,我正在尝试保护何时发生错误/没有返回数据。就目前而言,我得到了错误:
[Info] undefined (ionic.bundle.js, line 19387)
[Error] Error: undefined is not an object (evaluating 'data.data.length')
代码如下所示,可以理解的是它正在崩溃,因为data.data.length为null / undefined(没有为了测试而返回的数据)
SaveSubmitService.saveLocal('GetData', 'NearByHubs4S', $scope.options, false).then(function (data) {
$scope.return = data;
if (typeof data != "undefined") {
if (data.data.length > 0) {
$scope.bars = $scope.return.data;
$scope.noNot = false;
} else {
$scope.noNot = true;
}
} else {
$cordovaDialogs.alert('Could not retrieve data. Are you sure you\'re online?', 'No Response', 'Ok');
}
$scope.$broadcast('scroll.refreshComplete');
});
奇怪的是,它的类型为true,并且在data.data.length为null时会失败。
如果data == null,data == undefined,data ==“undefined”,data.data.length == undefined等,我已经尝试过了。
如果长度为空,我基本上是在尝试错误!
答案 0 :(得分:2)
问题不在于data.data.length
为空。问题是您要在length
上使用undefined
属性。这意味着data
已定义且为非null,但它没有data
属性,因此data.data
未定义。
而不是:
if (typeof data != "undefined") {
if (data.data.length > 0) {
执行:
if (data && data.data) {
if (data.data.length > 0) {
答案 1 :(得分:1)
我认为你的后卫不够,你需要检查data
和data.data
:
$scope.return = data;
if (data && data.data) {
if (data.data.length > 0) {
$scope.bars = $scope.return.data;
$scope.noNot = false;
} else {
$scope.noNot = true;
}
} else {
$cordovaDialogs.alert('Could not retrieve data. Are you sure you\'re online?', 'No Response', 'Ok');
}
如果data && data.data
truthy (data
,null
,{{1}以外的任何值,则undefined
只会为真},0
,""
或NaN
,这些都是 falsy ),如果false
是真实的话。如果data.data
是假的,我们不会尝试检查data.data
。
答案 2 :(得分:0)
试试这个
if (data && data.data) {
if (data.data.length > 0) {
...
} else {
....
}
}

答案 3 :(得分:0)
您似乎只检查数据变量,而不是其数据成员。
尝试使用if语句(例如if(data&&&dat; data.data& data.data.length> 0))来检查空数据。