我有一个包含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可以保存数据,这就是为什么我仍然会收到错误。我认为它应该是一个数组。
答案 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)
这会给你价值......