未捕获的ReferenceError:未定义cbfunc

时间:2015-12-11 07:50:35

标签: javascript angularjs

我目前正在

  

“未捕获的ReferenceError:未定义cbfunc”

我的开发中的问题

.controller('PlaylistCtrl', function($scope, $stateParams, $http, httpGetData) {

console.log($stateParams.catID);

$scope.items = [];

httpGetData.getTerkini().success(function(response){
$scope.items = response.rss.channel.item;

});     

});

angular.module('starter.services', [])

.factory('httpGetData', function($http){

     var dataItems = {};

     dataItems.getTerkini = function(){
         return $http({

             method: 'JSONP',
             url:'http://json2jsonp.com/?callback=cbfunc&url=http%3A%2F%2Ffullcontentrss.com%2Ffeed.php%3Furl%3Dwww.bharian.com.my%252Fterkini.xml%26key%3D2%26hash%3D3b961c45997507e9d86fae68fa34a216ee866830%26max%3D10%26links%3Dpreserve%26exc%3D%26format%3Djson'

         });         
     }
    return dataItems;

});
有人能帮帮我吗? THX

3 个答案:

答案 0 :(得分:0)

首先,您没有在工厂中回复承诺。改为:

     return $http({

         method: 'JSONP',
         url:'http://json2jsonp.com/?callback=cbfunc&url=http%3A%2F%2Ffullcontentrss.com%2Ffeed.php%3Furl%3Dwww.bharian.com.my%252Fterkini.xml%26key%3D2%26hash%3D3b961c45997507e9d86fae68fa34a216ee866830%26max%3D10%26links%3Dpreserve%26exc%3D%26format%3Djson'

     }).then(function(response) { //promise here
           return response;
     })

其次,在你的api中,你宣布了一个处理程序&#c; cbfunc'对于api响应,所以你需要在你的控制器中定义它:

function cbfunc(response) {
    console.log(response);
}

答案 1 :(得分:0)

我发现答案只是将URL更改为标准JSONP格式,回调必须在callback = JSON_CALLBACK中。

答案 2 :(得分:-1)

angular.module('starter.services', [])

.factory('httpGetData', function($http){

 var dataItems = {};

 dataItems.getTerkini = function(){
     return $http({

         .....

     });         
 }
return dataItems;

现在看看你的代码。您的dataItems是一个对象。所以为了访问或调用getTerkini函数,你需要编写

<强> httpGetData.dataItems.getTerkini()

但不是这样做,你可以做的是,

angular.module('starter.services', [])
.factory('httpGetData', function($http){
return {
 var dataItems = {};  // I don't understand the purpose of having dataItmes. basically what you can do is, you can use it within factory. but if you want to return it than your way would be cool.
 getTerkini = function(){
     return $http({
        ..... //function is going to return promise which can be caught at controller.
     });         
 }
});

所以,你可以这样称呼,

<强> httpGetData.getTerkini()