【问题标题】:AngularJS Factory undefined is not a functionAngularJS Factory undefined 不是函数
【发布时间】:2014-06-13 19:16:19
【问题描述】:

我正在尝试通过工厂中的 $http 调用从我的 JSON 文件中加载数据,每次运行代码时都会遇到相同的错误。我该如何解决这个问题。

错误

TypeError: undefined is not a function
at Object.getFruitsData (http://localhost/test/JSON/js/controllers.js:12:18)
at new <anonymous> (http://localhost/test/JSON/js/controllers.js:3:16)
at invoke (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:3869:17)
at Object.instantiate (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:3880:23)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:7134:28
at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:6538:34
at forEach (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:330:20)
at nodeLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:6525:11)
at compositeLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:5986:15)
at compositeLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:5989:13) 

我正在使用的代码在下面。

fruitsFactory.js

app.factory('fruitsData', function($http, $log){
    return{
        getFruitsData: function(succescb){
            $http({method:'GET', url:'json/testList.json'})
                .succes(function(data){
                succescb(data);
            })
            .error(function(data){
                $log.warn(data);    
            });     
       }
   };    
});

controller.js

app.controller('fruitsController',['$scope','fruitsData', function($scope, fruitsData){
    fruitsData.getFruitsData(function(fruits){
        $scope.fruits = fruits;
    });
}]);

【问题讨论】:

  • 成功拼写错误?成功了
  • 一切都与异步有关:stackoverflow.com/questions/16286605/…
  • 这种特殊情况下的错误与异步调用无关
  • 这与异步无关......就像 Dieter Goetelen 所说的那样,这完全是一个错字。您正在尝试调用一个名为 succes(arg) 的不存在的方法,而不是调用 success(arg)。
  • 是的,这是关于错字的。所以我能够从 JSON 文件中检索数据,但现在的问题是如何从数据库中检索数据?我有一个 MySQL 数据库,我有一个 PHP 文件来获取数据并将其编码为 JSON。但在那之后我该怎么办?

标签: json angularjs http factory typeerror


【解决方案1】:

你永远不会返回数据,你正在创建一个新函数来传递给工厂函数(错误?)

试试这个:

app.factory('fruitsData', ['$http', '$log', function($http, $log) {
  return {
    getFruitsData: function() {
      .success(function(fruitData) {
        return fruitData;
      })
      .error(function(errorMessage) {
        //log the error message
      });
    }
  }
}]);

app.controller('fruitController', ['$scope', 'fruitsData', function($scope, fruitsData) {
  fruitsData.getFruitsData().then(function(data) {
    $scope.fruits = data;
  });
}]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2014-07-30
    • 1970-01-01
    • 2020-10-12
    • 2015-10-29
    • 2015-06-05
    相关资源
    最近更新 更多