【问题标题】:TypeError: Cannot read property 'push' of undefined, JavaScriptTypeError:无法读取未定义 JavaScript 的属性“推送”
【发布时间】:2015-04-09 04:07:27
【问题描述】:

我在这个 Angular 项目中工作,用户提交评论表单,新评论被添加到已经发布的 cmets 中。这是我的代码。

.controller('productCtrl', function($scope, $http, $routeParams, Page){
$scope.product = {};
$scope.review = {};
$scope.comments = {};

routeparm = $routeParams.param;

$scope.review = function(){
    var review_box = $scope.review_form.review_box;

    $http.post('./comment.php', {
        comment : review_box,
        code: routeparm
    })

    .success(function(data){
            $scope.comments.push(data.comments);
            $scope.review.review_box = '';
    })

    .error(function(data){
        $scope.has_error = true;
        $scope.error_message = data;
    })

};

但是,当我尝试添加评论时,我收到以下错误。

TypeError: Cannot read property 'push' of undefined

我定义了一个空的 $scope.cmets = {};那么为什么我会收到此错误?我该如何解决?谢谢

【问题讨论】:

  • 您不能对 json 对象使用 push。但这将起作用 $scope.cmets = [ ];如果你把它初始化为数组。
  • 首先,为什么push被用在一个对象上?

标签: javascript jquery angularjs


【解决方案1】:

您声明的 cmets 是一个对象。只需将您的声明更改为数组,

发件人:

$scope.comments = {};

收件人:

$scope.comments = [];

编辑: 如果您需要推送新对象,您需要像这样将您的评论设置为对象数组并推送新对象

$scope.comments = { 
    1: {name:'',review:'',comment:'',uptime:'',gravatar:''}
}

 $scope.comments.push({name:'rukshi', review:'test comment',comment:'yet another comment',uptime:'',gravatar:''});

【讨论】:

  • 还是报错,json数据长这样 {"cmets":{"name":"rukshi","re​​view":"test comment","uptime":1428553143000,"gravatar ":"http:\/\/www.gravatar.com\/avatar\/ca1a69438a32fd2aa60806b90a960753?s=48"},"error":{"has_error":false}}
  • 是的,在未发布的代码部分中还有另一个问题,它将 $scope.cmets 设置为未定义,修复该问题,通过您的修复,现在一切正常。谢谢
【解决方案2】:

你可以试试这个

.controller('productCtrl', function($scope, $http, $routeParams, Page){
  $scope.product = {};
  $scope.review = {};
  $scope.comments = [];

  routeparm = $routeParams.param;

  $scope.review = function(){
  var review_box = $scope.review_form.review_box;

$http.post('./comment.php', {
    comment : review_box,
    code: routeparm
}).success(function(data){
        $scope.comments.push(data.comments);
        $scope.review.review_box = '';
}).error(function(data){
    $scope.has_error = true;
    $scope.error_message = data;
})

};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2017-11-23
    • 2016-05-06
    • 1970-01-01
    • 2021-07-23
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多