将用户输入与JSON对象数组中的某些字段进行比较

时间:2015-07-01 09:36:20

标签: json angularjs for-loop

我有一个包含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

在Nujabes说过之后我做了一些改变,因为我不需要$ 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可以保存数据,这就是为什么我仍然会收到错误。我认为它应该是一个数组。

2 个答案:

答案 0 :(得分:1)

我认为您的语法错误是省略了$ scope。

您应该向此行注入$ scope服务:

.service(&#39; LoginService&#39;,function($ q,$ http,$ scope){... });

这段代码:

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

省略$ scope。

- &GT;

user_data.then(function (result) {
            $scope.user = result.data;
        });
像这样。

试一试。

我希望它有效。

(但是,为什么要在您的服务中使用$ scope服务?  我认为,定义本地值并返回一些方法是更好的选择。  并且您在&#39;控制器中使用$ scope服务&#39;。)

答案 1 :(得分:0)

$ scope.user你试图循环是数组吗? using(for / in)将把密钥存储在变量x中,在你的情况下是每个元素的索引(0,1,2,..),循环遍历数组使用(for / of)像这样:

for (var value of array)

这会给你价值......