【问题标题】:Comparing user input to some fields in an array of JSON objects将用户输入与 JSON 对象数组中的某些字段进行比较
【发布时间】:2015-07-01 09:36:19
【问题描述】:

我有一个包含 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 可以保存数据,这就是为什么我仍然会出错。我认为它应该在一个数组中。

【问题讨论】:

    标签: json angularjs for-loop


    【解决方案1】:

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

    你应该在这一行注入 $scope 服务:

    .service('LoginService',function($q,$http,$scope){ ... });

    还有这段代码:

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

    省略 $scope。

    ->

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

    像这样。

    试一试。

    我希望它有效。

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

    【讨论】:

    • 将 $scope 添加到顶部会导致我的登录屏幕不显示。我对所有这些 angularJS 的东西还是很陌生。所以我可以一起摆脱范围并将我的http请求中的数据存储在一个数组中?
    • 您能告诉我您在控制台中遇到的消息吗?您说您的登录屏幕不显示,然后检查您的控制台。我想看看那些消息。
    • 你能做到吗?在回调函数 userArr = result.data 中定义 var userArr =[] 代码;
    • 我使用 w3 学校的基本 JSON for 循环得到它。但是如果没有你告诉我放弃 $scope 就无法得到它。干杯人
    【解决方案2】:

    $scope.user 您尝试循环遍历的是数组吗? using (for/in) 会将键存储在变量 x 中,在您的情况下,该变量是每个元素 (0,1,2,..) 的索引,以循环遍历数组 use (for/of) 如下所示:

    for (var value of array)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      相关资源
      最近更新 更多