AngularJS Ajax会遇到问题

时间:2015-04-18 05:13:23

标签: ajax angularjs

我对棱角分明有点新意,对这个问题感到头疼。我的工厂console.log显示第一次通过所有内容都已正确定义,但工厂出于某种原因重新评估我将其传递给undefined的数据。这是我的代码,从html输入开始,将数据传递给控制器​​,然后传递给工厂:

HTML:

<input type="text" placeholder="Enter Channel" ng-model="channel" ng-keydown="$event.which === 13 && cname(channel)"/>

一旦按下回车键,这将向我的控制器发送在输入字段中输入的内容cnam(channel)

控制器和工厂:

angular.module('youtubePlaylistAppApp')
  .factory('ytVids', function($http){

    return{
        getChannel: function(name){
            console.log('name: '+name);
            var url = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername='+ name +'&key=[my api key]';
            console.log(url);
            return $http.get(url);
        },
        getVids: function(channel){
            console.log('channel: '+ channel);
            return     $http.get('https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId='+channel+'&key=[my api key]')
            .success(function(response){
                //console.log(response.items);

                return response.items;
            });

        }
    };
  })
  .controller('indexCtrl', function ($scope, ytVids) {
     $scope.cname = function(channel){
        console.log(channel);
        ytVids.getChannel(channel);
        ytVids.getChannel().success(function(response){
        console.log(response);
        console.log(response.items[0].contentDetails.relatedPlaylists.uploads);
        ytVids.getVids(response.items[0].contentDetails.relatedPlaylists.uploads)
        .success(function(data){
                console.log(data.items);
                $scope.ytChannel = data.items;
            });
        });
    };
  });

输入在输入字段中输入后,我在控制台开发工具中看到的输出是:

第一个控制台日志console.log(channel);控制台记录正确的响应。如果我输入“freddiew”并按回车键,那就是记录的内容

然后我将其传递到我的工厂ytVids.getChannel(channel);和工厂中的控制台登录console.log('name: '+name);这会记录正确的响应,如name: freddiew

然后我声明一个变量var url =并将其提供给youtube网址,并使用网址连接通道名称

然后我控制台记录变量并得到预期的https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=freddiew&key=[my api key]'

当我在邮递员中尝试并且只是硬编码名称时,这个网址有效。但是传递名称,然后控制台会发出更多日志,我不知道为什么,它看起来像是覆盖了网址我刚建好来打电话,因为这是从工厂记录的内容:

name: freddiew

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=freddiew&key=[my key]

然后将其记录为undefined,并使用网址将api调用concats undefined并使用此undefined网址进行api调用

name: undefined

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=undefined&key=[my key]

forUsername=是频道名称应该去的地方。

任何人都知道为什么它被定义为undefined

1 个答案:

答案 0 :(得分:2)

我认为你有错误的额外服务电话。

  .controller('indexCtrl', function ($scope, ytVids) {
     $scope.cname = function(channel){
        console.log(channel);
        //ytVids.getChannel(channel); <-- you should remove this & passed channel param in below call
        ytVids.getChannel(channel).success(function(response){
        console.log(response);
        console.log(response.items[0].contentDetails.relatedPlaylists.uploads);
        ytVids.getVids(response.items[0].contentDetails.relatedPlaylists.uploads)
        .success(function(data){
                console.log(data.items);
                $scope.ytChannel = data.items;
            });
        });
    };
  });