【问题标题】:AngularJS error .success is not a functionAngularJS错误.success不是一个函数
【发布时间】:2016-02-05 12:10:21
【问题描述】:

我已经建立了一个工厂来处理我的控制器的功能,但不知何故,控制器在其中一个功能上返回错误:

错误:Auth.getUser(...).success 不是函数 @http://localhost:8080/app/controllers/mainCtrl.js:10:1
...

我不知道这里发生了什么,其余的功能似乎工作正常?

主控制器:

angular.module('mainCtrl', [])
.controller('mainController', function($rootScope, $location, Auth) {
    var vm = this;
    vm.loggedIn = Auth.isLoggedIn();
    $rootScope.$on('$routeChangeStart', function() {
        vm.loggedIn = Auth.isLoggedIn();
        Auth.getUser()
            .success(function(data) {
                vm.user = data;
            });
    });
    vm.doLogin = function() {
        Auth.login(vm.loginData.username, vm.loginData.password)
            .success(function(data) {
                $location.path('/users');
            });
    };
});

【问题讨论】:

  • 您使用的是哪个版本的 Angular?
  • AngularJS v1.4.7,刚刚安装了带凉亭的角度
  • 你应该使用 .then() 函数。您可以将 2 个函数作为参数传递给它,第一个用于成功回调(与 .success 相同),第二个用于错误回调。
  • $q.reject() 会返回一个没有成功方法的承诺,不是吗?即使在旧版本中?
  • 你的问题有很多浏览量,是这个错误信息的第一个谷歌结果。因此,我认为可以通过删除所有代码并仅询问错误消息来对其进行彻底编辑。但是我不想在不事先询问的情况下对您的帖子进行如此大的编辑(我也是一个有角度的新手,所以我可能是错的)。你同意吗?

标签: angularjs


【解决方案1】:

请参阅$http service documentation 的“弃用通知”:

$http 遗留的 promise 方法 successerror 已经 已弃用。请改用标准的 then 方法。

您可以在documentation about $q 中了解有关这些方法的更多信息。

【讨论】:

  • tnx,你救了我的命
【解决方案2】:

您可以使用 then 表示成功:

var personController = function ($scope, personService) {
    $scope.persons = personService.getAll().then(function (data) {
        $scope.persons = genericSuccess(data);
    });
    var genericSuccess=function(res) {
        return res.data;
    }
};

【讨论】:

    【解决方案3】:

    无论如何,.success 已被弃用,这是一件好事。我个人从来没有和它和平相处,你问的原因是什么?

    object.functionCall(parameters).success(functions (response){
    
    if(response!=="failure")
    do this-----
    });
    

    我的意思是,什么样的成功会处理其块内的失败。 改为使用 then,所有逻辑都将开始变得有意义。

    【讨论】:

      【解决方案4】:

      angular 版本 1.2.x 你可以使用 .success 角度版本 1.6.x 你会得到错误“.success 不是一个函数”

      解决方法是:将“.success”替换为“.then”

      【讨论】:

        【解决方案5】:

        这是代码

        废弃代码

        $http(  
        {  
            method: 'POST',  
            url: '/Home/CreateCustomer',   /*You URL to post*/
            data: $scope.cust   /*You data object/class to post*/
        }).success(function (data, status, headers, config)  
        {  
        
        }).error(function (data, status, headers, config)  
        {  
        
        }); 
        

        允许的代码 Angular $http docs

        $http(
            {
               method: 'POST',
               url: '/Home/CreateCustomer',  /*You URL to post*/
               data: $scope.cust  /*You data object/class to post*/
            }).then(function successCallback(response) {
               // this callback will be called asynchronously
               // when the response is available
        
        
            }, function errorCallback(response) {
               // called asynchronously if an error occurs
               // or server returns response with an error status.
        
        });
        

        【讨论】:

          【解决方案6】:

          成功承诺现在已被弃用。使用 then 函数代替成功

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-01
            • 2013-10-13
            • 2015-08-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-18
            相关资源
            最近更新 更多