【问题标题】:Type Error - Error Handling if data.data is undefined类型错误 - 如果 data.data 未定义,则错误处理
【发布时间】:2017-07-27 01:45:19
【问题描述】:

我有一个函数需要检查输入是否在数据库中已有照片。它已经可以显示它是否已经有一张现有的照片。我现在的问题是,如果我输入一个 ID 并且它没有任何照片,则会显示错误。你能帮我解决这个错误吗?

$scope.checkPhoto = function(newSCPID) {
if ($scope.newID == undefined) {
    alert('Please input new id');
} else {
    console.log($scope.newID);
    $scope.loadingloader = true;
    $('#loginloader').show();

    Service.checkPhoto($scope.newID)
        .then(function(data) {
            //$rootScope.loader = true;
            $scope.checkedPhoto = data.data[0].photos;
            //alert(data.data[0].photos);
            if (data.data[0].photos == undefined) {
                alert('Please input newid');
            }

            // alert($scope.checkedPhoto);
            //$rootScope.loader = false;
            $('#loginloader').hide();
            $('#notif').hide();
            // Original Values
        });
    }
}

如果我输入一个没有现有照片的新 ID,API 会显示 data.data[0].photos 未定义的错误。

我需要显示一个标题,表明该特定新 ID 中没有现有照片。我该怎么做呢

【问题讨论】:

  • 这意味着 data.data[0] 是未定义的.....所以在阅读之前添加一个检查它是否未定义。

标签: javascript jquery html angularjs angularjs-controller


【解决方案1】:

你正在检查未定义的照片,所以你需要检查这个data.data[0]而不是这个data.data[0].photos==undefined,你得到这个是因为你试图检查data.data[0].photos==undefined,而data.data[0]已经未定义,并且未定义没有物业照片。

【讨论】:

    【解决方案2】:

    在分配照片之前检查 data.data[0];

    Service.checkPhoto($scope.newID)
                        .then(function(data){
                            //$rootScope.loader = true;
                            if(data.data[0]) {
                                $scope.checkedPhoto=data.data[0].photos;
    
                               if(data.data[0].photos==undefined)
                               {
                                    alert('Please input newid');
                               }
                               $('#loginloader').hide();
                               $('#notif').hide();
                               // Original Values
                            }
    
                        }
                    );
    

    【讨论】:

      【解决方案3】:

      看起来data.data 应该是一个数组。所以最好在尝试操作它的项目之前检查数组是否不为空。

      .then(function(data){
          if (data.data.length && data.data[0].photos) {
              $scope.checkedPhoto = data.data[0].photos;
          } else {
              alert('Please input newid');
          }
          $('#loginloader').hide();
          $('#notif').hide();
      }
      

      【讨论】:

        【解决方案4】:

        像这样编写一个可用于整个应用程序的通用函数。

        function isUndefinedOrNull(val) {
            return angular.isUndefined(val) || val === null || val === '';
        }
        

        并在执行您的工作之前检查您的价值。下面是一个例子:

        if(!isUndefinedOrNull(data.data && data.data[0].photos))
        {
          alert('Please input newid');
        }
        

        【讨论】:

        • 一个名为 isUndefinedOrNull 的函数可能也不应该检查空字符串,或者重命名为 isUndefinedOrNullOrEmpty...
        • @MikeMcCaughan,谢谢
        猜你喜欢
        • 2019-09-22
        • 2019-10-31
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        • 2019-07-20
        相关资源
        最近更新 更多