TypeError:无法读取undefined的属性'original_title'

时间:2015-09-01 11:49:49

标签: json angularjs

我网站上的用户可以搜索movietitle,然后下拉列表会显示所有相应的标题。然后他们可以点击标题将该电影添加到他们的监视列表中。

当他们点击标题时,下面的addMovie功能会触发。

  $scope.addMovie = function() {

    'http://api.themoviedb.org/3/movie/206647?api_key=a8f7039633f2065942cd8a28d7cadad4&append_to_response=releases'
    // Search for release dates using the ID.
    var base = 'http://api.themoviedb.org/3/movie/';
    var movieID = $(event.currentTarget).parent().find('.movieID').text()
    var apiKey = 'a8f7039633f2065942cd8a28d7cadad4&query='
    var append_to_response = '&append_to_response=releases'
    var callback = 'JSON_CALLBACK'; // provided by angular.js
    var url = base + movieID + '?api_key=' + apiKey + append_to_response + '&callback=' + callback;

    $http.jsonp(url,{ cache: true}).
      success(function (data, status, headers, config) {

        if (status == 200) {
          // $scope.movieListID = data.results;
          $scope.movieListID = data;
          console.log($scope.movieListID)
        } else {
          console.error('Error happened while getting the movie list.')
        }

      }).
      error(function (data, status, headers, config) {
        console.error('Error happened while getting the movie list.')
      });

    createMovie.create({
            title: $scope.movieListID.original_title
    }).then(init);

  };

http请求有效,在控制台中我可以找到对象和original_title但创建方法失败。

TypeError: Cannot read property 'original_title' of undefined at Scope.$scope.addMovie

所以我猜测title: $scope.movieListID.original_title不是直接保存JSON数据的正确方法吗?

2 个答案:

答案 0 :(得分:1)

尝试这种方式。

success(function(data, status, headers, config) {

        if (status == 200) {
            // $scope.movieListID = data.results;
            $scope.movieListID = data;
            console.log($scope.movieListID);

            createMovie.create({ title: $scope.movieListID.original_title }).then(init);




        } else {
            console.error('Error happened while getting the movie list.')
        }

    })

你在createMovie.create之外拨打http.jsonp 这是异步调用。你可以在http调用中调用它或使用promise链接它。

答案 1 :(得分:0)

在发出$ http请求并检查一次之前,请将空对象分配给$ scope.movi​​eListID。由于吊装可能导致问题。我无法检查,因为没有小提琴或钢笔。

$ scope.movi​​eListID = {};