2015-07-01 6 views
0

У меня есть веб-сервер с данными JSON. Это то, что мои данные выглядитСравнение ввода пользователя с некоторыми полями в массиве объектов 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 достаточно хорошо, чтобы найти проблему. Любая помощь действительно ценится, спасибо.

Edit 1

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

//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 может хранить данные, и именно поэтому я все еще получаю ошибки. Я думаю, что это должно быть в массиве.

ответ

1

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

Вы должны впрыснуть $ Область службы этой линии:

.Service ('LoginService', функция ($ д, $ HTTP, $ SCOPE) {... });

И этот код:

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

Опустим $ объем.

->

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

как это.

Дайте ему попробовать.

Я надеюсь, что это сработает.

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

+0

добавив $ объем в верхней части вызывает мой логин экран не показывать.Я все еще совершенно новичок во всем этом мире. Таким образом, я могу избавиться от области действия вместе и хранить данные из моего HTTP-запроса в массиве, возможно? –

+0

Можете ли вы показать мне сообщение, с которым вы столкнулись в своей консоли? Вы сказали, что ваш экран входа в систему не отображается, а затем проверьте консоль. Я хочу увидеть это сообщение. – nujabes

+0

Можете ли вы сделать это? определить var userArr = [] код выше и в функции обратного вызова userArr = result.data; – nujabes

0

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

for (var value of array) 

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

Смежные вопросы