Javascript angularjs-从工厂返回数据时出现问题

Javascript angularjs-从工厂返回数据时出现问题,javascript,angularjs,Javascript,Angularjs,我试图创建一个db工厂,在成功发布数据后将数据从数据库返回到客户机,但由于某些原因返回为“未定义” 我的工厂函数如下所示: uno.factory('adbFactory', ['$http', function($http){ var fact = {}; fact.get = function(http, query, isAll) { //var query = "get all blog_posts"; http.post('php/a

我试图创建一个db工厂,在成功发布数据后将数据从数据库返回到客户机,但由于某些原因返回为“未定义”

我的工厂函数如下所示:

uno.factory('adbFactory', ['$http', function($http){

    var fact = {};

    fact.get = function(http, query, isAll) {
        //var query = "get all blog_posts";
        http.post('php/adb/adb.php', {'query': query, 'all': isAll})
        .success(function(data){
            //console.log(data);
            return data;
        })
        .error(function(){
            console.log('Error...');
        });
    };

    return fact;

}]);
我的控制器是这样的:

uno.controller('newsCtrl', function($scope, $http, adbFactory){
    $scope.derp = 'derp!!!!!';
    console.log(adbFactory.get($http, 'get users 1', false));
});

不要担心“getusers1etc”字符串,我在php中创建了一个函数,它根据给定的参数呈现SQL查询。我的工厂代码中是否有需要改进的地方???

我建议从工厂返回承诺,并在控制器中处理成功和错误事件

fact.get = function(http, query, isAll) {
    return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};

uno.controller('newsCtrl', function($scope, $http, adbFactory){
   adbFactory.get($http, 'get users 1', false).success(function(data) {
       console.log(data);
   });
});

我建议从工厂返回承诺,并在控制器中处理成功和错误事件

fact.get = function(http, query, isAll) {
    return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};

uno.controller('newsCtrl', function($scope, $http, adbFactory){
   adbFactory.get($http, 'get users 1', false).success(function(data) {
       console.log(data);
   });
});

我建议从工厂返回承诺,并在控制器中处理成功和错误事件

fact.get = function(http, query, isAll) {
    return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};

uno.controller('newsCtrl', function($scope, $http, adbFactory){
   adbFactory.get($http, 'get users 1', false).success(function(data) {
       console.log(data);
   });
});

我建议从工厂返回承诺,并在控制器中处理成功和错误事件

fact.get = function(http, query, isAll) {
    return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};

uno.controller('newsCtrl', function($scope, $http, adbFactory){
   adbFactory.get($http, 'get users 1', false).success(function(data) {
       console.log(data);
   });
});

fact.get
方法没有返回语句,这就是为什么它返回
undefined

此外,这个回调是无用的,因为它是异步调用的

.success(function(data){
   //console.log(data);
   return data;
 })
我想你想要这样的东西:

fact.get = function(http, query, isAll) {
   return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};


uno.controller('newsCtrl', function($scope, $http, adbFactory){    

    adbFactory
    .get($http, 'get users 1', false)
    .success(function(data){
         console.log(data);
     })
     .error(function(){
         console.log('Error...');
     });

});

fact.get
方法没有返回语句,这就是为什么它返回
undefined

此外,这个回调是无用的,因为它是异步调用的

.success(function(data){
   //console.log(data);
   return data;
 })
我想你想要这样的东西:

fact.get = function(http, query, isAll) {
   return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};


uno.controller('newsCtrl', function($scope, $http, adbFactory){    

    adbFactory
    .get($http, 'get users 1', false)
    .success(function(data){
         console.log(data);
     })
     .error(function(){
         console.log('Error...');
     });

});

fact.get
方法没有返回语句,这就是为什么它返回
undefined

此外,这个回调是无用的,因为它是异步调用的

.success(function(data){
   //console.log(data);
   return data;
 })
我想你想要这样的东西:

fact.get = function(http, query, isAll) {
   return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};


uno.controller('newsCtrl', function($scope, $http, adbFactory){    

    adbFactory
    .get($http, 'get users 1', false)
    .success(function(data){
         console.log(data);
     })
     .error(function(){
         console.log('Error...');
     });

});

fact.get
方法没有返回语句,这就是为什么它返回
undefined

此外,这个回调是无用的,因为它是异步调用的

.success(function(data){
   //console.log(data);
   return data;
 })
我想你想要这样的东西:

fact.get = function(http, query, isAll) {
   return http.post('php/adb/adb.php', {'query': query, 'all': isAll});
};


uno.controller('newsCtrl', function($scope, $http, adbFactory){    

    adbFactory
    .get($http, 'get users 1', false)
    .success(function(data){
         console.log(data);
     })
     .error(function(){
         console.log('Error...');
     });

});

您必须记住,您正在执行一些异步请求

有两种方法可以检索数据:

  • 遵循回调方式
  • 信守诺言
如您所知,$http服务返回承诺,并且有一些回调方法,例如.success().then()

对于承诺,$q.defer()是来自延迟API的承诺管理器

$q.defer()获取两种方法:

  • 解决(价值):通过给她最终的价值来解决我们相关的承诺

  • 拒绝(原因):用于解决承诺错误

因此,您可以:

服务

(function(){

  function Service($http, $q){

    var defer = $q.defer();

    //Callback way
    function get(callback){
      $http.get('app.php').success(function(data){
        //Pass our data to the callback
        callback(data);
      });
    }

    //Promise ways
    function getPromise(){
      $http.get('app.php').success(function(data){
        //Resolve the data
        defer.resolve(data);
      });
      //Return our promise
      return defer.promise;
    }

    return {
      get: get,
      getPromise: getPromise
    };

  }

  angular
    .module('app')
    .factory('Service', Service);

})();
控制器

(function(){

function Controller($scope, Service) {

  //Our callback method
  function print(data){
      console.log(data);
  }

  //Retrieve our data by using callback way
  Service.get(print);


  //Retrieve our data by using promise way
  var promise = Service.getPromise();

  //When promise is resolved
  promise.then(function(data){
    //Retrieve our data
    console.log(data);
  });

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

但是我应该用什么呢?我认为使用
承诺
比回调好,因为您可以轻松处理您的请求。此外,您可以执行承诺链接,避免著名的回调地狱

您必须记住,您正在执行一些异步请求

有两种方法可以检索数据:

  • 遵循回调方式
  • 信守诺言
如您所知,$http服务返回承诺,并且有一些回调方法,例如.success().then()

对于承诺,$q.defer()是来自延迟API的承诺管理器

$q.defer()获取两种方法:

  • 解决(价值):通过给她最终的价值来解决我们相关的承诺

  • 拒绝(原因):用于解决承诺错误

因此,您可以:

服务

(function(){

  function Service($http, $q){

    var defer = $q.defer();

    //Callback way
    function get(callback){
      $http.get('app.php').success(function(data){
        //Pass our data to the callback
        callback(data);
      });
    }

    //Promise ways
    function getPromise(){
      $http.get('app.php').success(function(data){
        //Resolve the data
        defer.resolve(data);
      });
      //Return our promise
      return defer.promise;
    }

    return {
      get: get,
      getPromise: getPromise
    };

  }

  angular
    .module('app')
    .factory('Service', Service);

})();
控制器

(function(){

function Controller($scope, Service) {

  //Our callback method
  function print(data){
      console.log(data);
  }

  //Retrieve our data by using callback way
  Service.get(print);


  //Retrieve our data by using promise way
  var promise = Service.getPromise();

  //When promise is resolved
  promise.then(function(data){
    //Retrieve our data
    console.log(data);
  });

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

但是我应该用什么呢?我认为使用
承诺
比回调好,因为您可以轻松处理您的请求。此外,您可以执行承诺链接,避免著名的回调地狱

您必须记住,您正在执行一些异步请求

有两种方法可以检索数据:

  • 遵循回调方式
  • 信守诺言
如您所知,$http服务返回承诺,并且有一些回调方法,例如.success().then()

对于承诺,$q.defer()是来自延迟API的承诺管理器

$q.defer()获取两种方法:

  • 解决(价值):通过给她最终的价值来解决我们相关的承诺

  • 拒绝(原因):用于解决承诺错误

因此,您可以:

服务

(function(){

  function Service($http, $q){

    var defer = $q.defer();

    //Callback way
    function get(callback){
      $http.get('app.php').success(function(data){
        //Pass our data to the callback
        callback(data);
      });
    }

    //Promise ways
    function getPromise(){
      $http.get('app.php').success(function(data){
        //Resolve the data
        defer.resolve(data);
      });
      //Return our promise
      return defer.promise;
    }

    return {
      get: get,
      getPromise: getPromise
    };

  }

  angular
    .module('app')
    .factory('Service', Service);

})();
控制器

(function(){

function Controller($scope, Service) {

  //Our callback method
  function print(data){
      console.log(data);
  }

  //Retrieve our data by using callback way
  Service.get(print);


  //Retrieve our data by using promise way
  var promise = Service.getPromise();

  //When promise is resolved
  promise.then(function(data){
    //Retrieve our data
    console.log(data);
  });

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

但是我应该用什么呢?我认为使用
承诺
比回调好,因为您可以轻松处理您的请求。此外,您可以执行承诺链接,避免著名的回调地狱

您必须记住,您正在执行一些异步请求

有两种方法可以检索数据:

  • 遵循回调方式
  • 信守诺言
如您所知,$http服务返回承诺,并且有一些回调方法,例如.success().then()

对于承诺,$q.defer()是来自延迟API的承诺管理器

$q.defer()获取两种方法:

  • 解决(价值):通过给她最终的价值来解决我们相关的承诺

  • 拒绝(原因):用于解决承诺错误

所以哟