使用 Angularjs 获取令牌

Get token with Angularjs

我正在开发 Angularjs + Moodle + WebService APP

我做了一点登录页面,有一个问题。

我正在通过 $.ajax 获取我的用户的令牌,我可以在我的 chrome 控制台中看到它。

问题是,我想保存该令牌以便在 WS moodle 函数中使用它,我正在使用 JSON.strungify 获取令牌,但我没有成功。

我只是得到 -> {readystate: 1} 作为警报,而不是得到一个令牌。但在我的 console.info(response); 中,我得到了令牌,如下图所示:

这是我的代码:

controller.js

var app = angular.module('mainApp', ['ngRoute', 'toaster', 'ngAnimate']);

app.config(function($routeProvider) {
    $routeProvider
    .when('/', {
        templateUrl: 'login.html'
    })
    .when('/dashboard', {
        resolve: {
            "check": function($location, $rootScope) {
                if(!$rootScope.loggedIn){
                    $location.path('/');
                } 
            }
        },  
        templateUrl: 'dashboard.html'   
    })
    .otherwise({
        redirectTo: '/'
    });
});


app.controller('loginCtrl', 

function($scope, $location, $rootScope) {
    $scope.submit = function() {
        /*if($scope.username == 'admin' && $scope.password == 'admin') {
            $rootScope.loggedIn = true;
            $location.path('/dashboard');
        } else {
            alert('Wrong Stuff');
        }*/
        $rootScope.loggedIn = true;
        var username = $scope.username;
        var password = $scope.password;
        postCredentials(username, password/*, createSession*/);

    };

    function postCredentials(username, password, callback) {
    if (username!==null || password!==null) {


        var serverurl = 'https://comunidaddeaprendizaje.cl/ac-cap/login/token.php';

         var data = {
             username: username,
             password: password,
             service: 'moodle_mobile_app' // your webservice name
         }

         var response = $.ajax(
                            {   type: 'POST',
                                data: data,
                                url: serverurl,
                                dataType: 'JSON'
                            }
                         );

        console.info(response);
        dataString = JSON.stringify(response);
        alert(dataString);

             if (dataString.indexOf('error') > 0) {
               alert('Invalid user credentials, please try again');
             };

         } else {
            alert('Something Wrong');
         }
     }

}

);

login.html

div class="breadcrumbs" id="breadcrumbs">
    <ul class="breadcrumb">
        <li>
            <i class="ace-icon fa fa-home home-icon"></i>
            <a href="#">Home</a>
        </li>
        <li class="active">Login</li>
    </ul>
</div>

<div class="page-content">

<div class="row">
<div class="space-6"></div>
<div class="col-sm-10 col-sm-offset-1">
    <div id="login-box" class="login-box visible widget-box no-border">
        <div class="widget-body">
        <div class="widget-main">

        <h4>Login ACCAP</h4>

            <div ng-controller="loginCtrl">
            <form action="/"  class="form-horizontal" id="myLogin">
            <div class="form-group">
                UserName: 
                <input type="text" class="form-control" id="username" ng-model="username" required focus><br>
                Password:  
                <input type="password" class="form-control" id="password" ng-model="password"  required>
                </br>
                <button type="button" class="width-35 pull-right btn btn-sm btn-primary" ng-click="submit()">
                <div class="col-sm-7">
                <i class="ace-icon fa fa-key"></i>
                Login
                </button>
                </div>
            </div>
            </form>
            </div>

         </div>
        </div>
    </div>
</div>
</div>
</div>

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Login APP</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/angularjs-toaster/1.1.0/toaster.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.7/angular.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.3/angular-route.js"></script>
    <script src="https://code.angularjs.org/1.2.0/angular-animate.min.js" ></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angularjs-toaster/1.1.0/toaster.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script>
    <script src="controller.js"></script>
</head>
<body ng-app="mainApp">
    <div ng-view></div>
</body>
</html>

感谢您的帮助!

response 变量是一个对象,其中包含有关响应的大量信息。它与您的回复文本不同。
您的第二个错误是您的 AJAX 调用是异步的,因此您无法在 AJAX 调用后立即获得响应。您需要等待回复。而不是

var response = $.ajax({
  type: 'POST',
  data: data,
  url: serverurl,
  dataType: 'JSON'
});
console.info(response);
dataString = JSON.stringify(response);
alert(dataString);
if(dataString.indexOf('error') > 0) {
  alert('Invalid user credentials, please try again');
};

你应该写

var response = $.ajax({
  type: 'POST',
  data: data,
  url: serverurl,
  dataType: 'JSON',
  success: function(response) {
    console.info(response);
    dataString = JSON.stringify(response);
    alert(dataString);
    if(dataString.indexOf('error') > 0) {
      alert('Invalid user credentials, please try again');
    };
  }
});