Angularjs $ http get всегда возвращает нулевую или пустую строку при получении имени пользователя из контроллера mvc

0

Я новичок в Angularjs, и я хочу получить имя пользователя от контроллера Asp.net MVC. В моем угловом контроллере у меня есть заводской метод "getUserName", который получает имя пользователя от контроллера mvc. Ниже приведен код

ФАБРИКА

appControllers.factory('testFactory', ['$http', function ($http) {
        var factory = {};

        factory.getUserName = function(){
            return $http.get('Home/GetUser').then(function (result) { return result.data; });
        }

        return factory;
    }]);

В контроллере приложений я вызвал заводскую услугу "getUserName" для получения текущего активного пользователя. См. Код и поведение.

КОНТРОЛЛЕР APP

appControllers.controller('contrlA', ['$scope', '$http', 'testFactory', function ($scope, $http, testFactory) {
     var user = ' ';
        testFactory.getUserName().then(function (result) {
            user = result;
            console.log('print out of console suser ' + user); // this prints my windows login name "print out of console suser AMAZO\demo.b"
        });
        console.log('print out of console user ' + user); // this is the problem, note username is missing "print out of console user"
 }]);

ASP.NET MVC ACTION

 [HttpGet]
        public string GetUser() 
        {
            var userName = User.Identity.Name;

            return userName;
        }

АННОТАЦИЯ: Я хочу присвоить результат getUserName переменной, чтобы я мог использовать ее как вход для других методов. Пожалуйста, простите меня, если вопрос слишком прост, я новичок в angularjs и был в этом вопросе более 4 дней.

  • 1
    Посмотрите на последний ответ от @BenjaminGruenbaum
  • 0
    Да, пожалуйста, прочитайте комментарий в контроллере приложения.
Показать ещё 5 комментариев
Теги:
asp.net-mvc
asp.net-mvc-4

1 ответ

1
Лучший ответ

Это потому, что HTTP-запрос является asyncrhonus, и console.log, который не работает, ударяется до завершения HTTP-запроса.

  • 0
    я фактически передал var "user" в качестве входных данных для другой функции и установил точку останова VS 2013. Пользователь все еще был нулевым
  • 0
    Это потому, что это не объект с самого начала (он у вас есть как строка), и даже если вы уничтожили ссылку, выполнив user = result;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню