Сравнение пользовательского ввода с некоторыми полями в массиве объектов JSON

0

У меня есть веб-сервер с данными JSON. Вот как выглядят мои данные

[
  {
    iduser: 1,
    username: "joe",
    password: "****"
  },
  {
    iduser: 2,
    username: "gina",
    password: "****"
  }
]

В моем приложении я беру некоторый пользовательский ввод и хочу сравнить его с полем имени пользователя и пароля. Здесь я проверяю данные

.service('LoginService', function ($q, $http) {
  return {
    loginUser: function (name, pw) {
        var deferred = $q.defer();
        var promise = deferred.promise;
        var user_data = $http.get("http://<my ip address>:<port>/login");
        user_data.then(function ($scope, result) {
            $scope.user = result.data;
        })
        for (var x in $scope.user) {
            if (name == x.username && pw == x.password) {
                deferred.resolve('Welcome ' + name + '!');
            } else {
                deferred.reject('Wrong credentials.');
            }
        }
        promise.success = function (fn) {
            promise.then(fn);
            return promise;
        }
        promise.error = function (fn) {
            promise.then(null, fn);
            return promise;
        }
        return promise;
    }
  }
})

Я все еще изучаю angularJS, и я знаю, что это не безопасный способ проверить данные, которые я просто хочу, чтобы этот цикл работал.

Мое понимание того, что у меня здесь, это то, что $ scope.user содержит мои данные JSON. Затем данные циклически повторяются с циклом for, а имя ввода пользователя сравнивается с именем пользователя для каждой итерации. Но это не так, потому что каждый раз я получаю отказ.

Я почти уверен, что это синтаксическая ошибка, но я не знаю JavaScript или AngularJS достаточно хорошо, чтобы найти проблему. Любая помощь действительно ценится, спасибо.

Редактировать 1

После того, как Нуджабес сказал, что я внес некоторые изменения, так как мне не нужно $ scope.

//previous code the same
user_data.then(function (result) {
  var user = result.data;
})
for (var x in user) {
  if (name == x.username && pw == x.password) {
//prior code the same

Я не думаю, что var может хранить данные, и поэтому я все еще получаю ошибки. Я думаю, что это должно быть в массиве.

Теги:
for-loop

2 ответа

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

Я думаю, что ваша синтаксическая ошибка заключается в том, что вы опускаете $ scope.

Вы должны ввести $ scope service в эту строку:

.service('LoginService', функция ($ q, $ http, $ scope) {...});

И этот код:

user_data.then(function ($scope, result) {
        $scope.user = result.data;
    });

Опустите масштаб $.

->

user_data.then(function (result) {
            $scope.user = result.data;
        });

как это.

Попробуйте.

Надеюсь, это сработает.

(Однако почему вы хотите использовать службу $ scope в своей службе? Я думаю, что определение локального значения и возврат какого-либо метода - лучший выбор, и вы используете службу $ scope в своем "контроллере".)

  • 0
    добавление $ scope в верхнюю часть заставляет мой экран входа в систему не отображаться. Я все еще новичок во всем этом AngularJS. Так что я могу избавиться от области видимости все вместе и, возможно, сохранить данные из моего http-запроса в массиве?
  • 0
    Можете ли вы показать мне сообщение, с которым вы столкнулись в своей консоли? Вы сказали, что ваш экран не отображается, а затем проверьте свою консоль. Я хочу увидеть это сообщение.
Показать ещё 2 комментария
0

$ scope.user, который вы пытаетесь пропустить, - это массив? используя (for/in) будет хранить ключ в переменной x, которая в вашем случае указана для каждого элемента (0,1,2,..), для использования в цикле использования массивов (для/из) следующим образом:

for (var value of array)

это даст вам значения...

Ещё вопросы

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