将ajax请求结果分配给AngularJS

时间:2015-12-07 21:58:21

标签: angularjs ajax

我正在使用AngularJS开始我的jurney并且有一些关于将ajax请求中的数据分配给简单JS变量的问题。

我有services.js文件,在简单登录后我们将用户名存储在cookie中。 我想根据用户名从服务器获取用户ID。之后我想在另一个工厂的另一个文件中收到这个值。

services.js

    angular.module('starter.services', ['ngResource', 'ngCookies', 'constants'])

  .factory('Auth', function ($cookieStore, $http, $q, MYTAMER) {
    var _user = $cookieStore.get('starter.user');
    var setUser = function (user) {
      _user = user;
      $cookieStore.put('starter.user', _user);
    };

    function getUserId(username) {
      return $http.get(MYTAMER.url + '/user/getId?username=' + username);
    }

    return {
      setUser: setUser,
      isLoggedIn: function () {
        return _user ? true : false;
      },
      getUser: function () {
        var userId = getUserId(_user.username)
          .then(function (response) {
            User.id = response.data;
          });
        return userId;
      },
      logout: function () {
        $cookieStore.remove('starter.user');
        _user = null;
      }
    }
  });

仪表板services.js

angular.module('dashboard.services', ['ngResource', 'ngRoute', 'constants'])

  .factory('Dashboard', function ($resource, $http, Auth) {
    var dashboardData = {};

    dashboardData.getGroups = function () {
      console.log(Auth.getUser());
    };

    return dashboardData;
  })

问题是我在http.get中获取userId值,但返回的值包含如下内容:

Promise {$$state: Object}
$$state: Object
status: 1
value: 1

您能否告诉我如何传递 response.data 中存储的值?谢谢

1 个答案:

答案 0 :(得分:0)

在您的服务中,您在Auth.getUser函数中返回的userId实际上是Javascript Promise Object

简而言之,这意味着当您调用Auth.getUser函数时,浏览器(即Javascript)必须异步等待从您的服务器(通过您调用的AJAX调用)中检索userId。 userId可以在Javascript的内存中访问。您使用.then()函数告诉Javascript等待来自服务器的响应。

因此,您的getUser()函数应该更像:

getUser: function () {
  return getUserId(_user.username)
    .then(function (response) {
      User.id = response.data;

      return response.data; // This is what gets passed to the .then() function in Auth.getUser().then(function (userData) {})
    });
}

然后要获得userId,您需要执行以下操作:

Auth.getUser().then(function (userId) {
  // Javascript waits until Auth.getUser() is completed, then runs this callback function. This is the information that is returned from the line `return response.data`

  // Do what you need with the userId variable here
});