javascript - AngularJS:如何在服务中完成 AJAX 调用后执行 Controller 功能?

标签 javascript jquery ajax angularjs xmlhttprequest

这是我在服务中的代码。

this.loginUser = function(checkUser) {
    Parse.User.logIn(checkUser.username, checkUser.password, {
        success: function(user) {
            $rootScope.$apply(function (){
                $rootScope.currentUser = user;
            });
        }
    });
};

这是我在 Controller 中的代码:

$scope.logIn = function(){
    authenticationService.loginUser($scope.checkUser);
        console.log($scope.currentUser)
};

所以,我想做的是,在 AJAX 调用完成后执行一些代码,其成功函数设置 $scope.currentUser 的值,我可以将其用于某些条件逻辑(如重定向等) 成功函数正确设置了值,但是 console.log 应该在执行 authenticationService.loginUser() 函数之后执行。

最佳答案

您需要使用 $q 返回 promise 并采取行动。

例如在您的服务中:

this.loginUser = function(checkUser) {
    var deferred = $q.defer();
    Parse.User.logIn(checkUser.username, checkUser.password, {
        success: function(user) {
            $rootScope.$apply(function (){
                $rootScope.currentUser = user;
            });
            deferred.resolve();
        }
    });
    return deferred.promise;
};

然后在你的 Controller 中对成功采取行动:

$scope.logIn = function(){
    authenticationService.loginUser($scope.checkUser).then(function() {
        console.log($rootScope.currentUser));
    });
};

关于javascript - AngularJS:如何在服务中完成 AJAX 调用后执行 Controller 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546593/

相关文章:

javascript - 在 JavaScript 页面上编辑可填写的 PDF 文件

javascript - jQuery 响应式横幅自动调整图像和内容的大小以适应空间

php - 推送通知到客户端浏览器

jquery - 如何使用 multer (或其他)使用 jquery ajax 在 Nodejs 中上传文件?

jQuery 在 f :ajax 之后应用 css 类

javascript - ng-repeat 中的 angularJS 过滤器表达式

javascript - Node JS Nodemailer POST 内部服务器错误 500

javascript - 跟踪访问者 JS 错误?

javascript - Rails 6 在 Rails View 中使用 Webpacker javascript 函数

jquery - 页面刷新后 SignalR 不向客户端广播数据