AngularJS 工厂:undefined不是一个函数

3

我正在尝试通过我的工厂中的 $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;
    });
}]);

成功的打字错误?应该是“success”。 - Dieterg
这是关于异步的:https://dev59.com/oWQo5IYBdhLWcg3wI8jx - Eduard Gamonal
这种特殊情况下的错误与异步调用无关。 - Tim
1
这不是关于异步的问题...就像Dieter Goetelen所说的那样,这全都是一个打字错误。你试图调用一个不存在的方法叫做succes(arg),而不是调用success(arg)。 - António Sérgio Simões
是的,这是关于打字错误的问题。我能够从JSON文件中检索数据,但现在的问题是如何从数据库中检索数据?我有一个MySQL数据库和一个PHP文件来获取数据并将其编码为JSON。但之后我该怎么办呢? - Mike
我从我的 MySQL 数据库中获得了数据,但仍然遇到了 SyntaxError: Unexpected token {。这是因为我的 PHP 文件吗?它返回了这样的内容:{"0":"1","id":"1","1":"John","name":"John","2":"Doe","lastName":"Doe","3":"22","age":"22"}这是因为返回值以 { 开头吗? - Mike
1个回答

2

你从未返回数据,而且你正在创建一个新函数传递给工厂函数(错误?)

试试这个:

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;
  });
}]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接