AngularJS给出了TypeError异常

时间:2015-08-12 15:21:48

标签: javascript angularjs rest ionic-framework

所以,我是制作移动应用程序的Ionic和Angular新手。但是,我有一个基本的登录表单,以及一个成功调用控制器的登录按钮。控制器看起来像:

angular.module('starter.controllers', [])
    .controller('LoginCtrl', function($scope, LoginService, $ionicPopup, $state) {
        $scope.data = {};

        $scope.login = function() {
            LoginService.loginUser($scope.data.username, $scope.data.password)
                .success(function(data) {
                    // $state.go('tab.dash');
                    var alertPopup = $ionicPopup.alert({
                        title: 'Login HERE!',
                        template: 'HERE: your credentials!'
                    });
                }).error(function(data) {
                    var alertPopup = $ionicPopup.alert({
                        title: 'Login failed!',
                        template: 'Please check your credentials!'
                    });
                });
        }
    });

现在调用的服务如下:

angular.module('starter.services', [])
    .service('LoginService', function($http,$q) {
        return {
            loginUser : function(name, pw) {
                console.log('username=' + name + ', password=' + pw);
                var deferred = $q.defer();
                var promise = deferred.promise;

                var url = 'https://myURL/myapi/authenticate?username=' + name + '&password=' + pw;
                console.log('url=' + url);

                $http.get(url)
                    .success(function(data) {
                        console.log("success: data=" +data);
                        deferred.resolve(data);
                    })
                    .error(function() {
                        console.log("error");
                        deferred.reject("Failed to authenticate");
                    });

                // Return the promise to the controller
                promise.success = function(fn) {
                    promise.then(fn);
                    return promise;
                }
                promise.error = function(fn) {
                    promise.then(null, fn);
                    return promise;
                }

                return promise;
            }
        }
    })

我已正确构建的URL,它正确调用RESTful api。 如果登录成功,我会将令牌ID作为单个字符串获取。 如果登录失败,我会收到一行作为错误消息。

我确实读过GET restful Web调用需要一组数据。我可以在controller.js中看到:String data = {};

我得到的真正错误信息是。控制器中的.ccess不会映射到获取字符串,而是映射到数组。

如果有人可以帮我解决我是否可以将数据设为数组,或者我是否可以使用单个字符串添加新的.success和.error,那就太棒了。

谢谢!

更新:

以下是我得到的例外情况:

08-17 11:08:56.412: E/Web Console(6538): TypeError: Object #<Object> has no method 'success'
08-17 11:08:56.412: E/Web Console(6538):     at Scope.$scope.login (file:///android_asset/www/js/controllers.js:36:12)
08-17 11:08:56.412: E/Web Console(6538):     at $parseFunctionCall (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:21172:18)
08-17 11:08:56.412: E/Web Console(6538):     at IonicModule.config.factory.element.onclick (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:53674:9)
08-17 11:08:56.412: E/Web Console(6538):     at Scope.$get.Scope.$eval (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:23228:28)

1 个答案:

答案 0 :(得分:0)

您处理AFAICT的承诺过于复杂。我甚至不确定你要对所有这些成功和错误功能做些什么。你可以拥有:

angular.module('starter.services', [])
.service('LoginService', function($http,$q) {
    return {
        loginUser : function(name, pw) {
            console.log('username=' + name + ', password=' + pw);

            var url = 'https://myURL/myapi/authenticate?username=' + name + '&password=' + pw;
            console.log('url=' + url);

            return $http.get(url);
        }
    }
})