2014-11-02 3 views
1

Я пытаюсь сделать аутентификацию входа в систему, используя php, чтобы соответствовать имени пользователя и паролю и повторять его как объект JSON.Извлечь данные JSON для аутентификации

Форма должна быть отправлена ​​с использованием ajax, а также прочитать возвращенные данные JSON. Это та часть, с которой я столкнулся.

Мой HTML выглядит следующим образом:

<form id='logform' method='post' > 
    <label for="username">User Name:&nbsp;</label><input id='user_name' type='text' name='username' required placeholder='User Name' /> 
    <label for="password">Password:&nbsp;</label><input type='password' placeholder="Password" name='password' id="password" required /> 
    <input type="submit" name="submit" id="login" value="Log In" /> 
    <input type="button" id="cancel_hide" value="Cancel" /> 
</form> 

sendLogDetails.php:

<?php 
include("dbconnect.php"); 
$numrows=0; 
$password=$_POST['password']; 
$username=$_POST['username']; 

$query="select username, fname, lname, memcat from members where (username='$username' && password='$password')"; 
$link = mysql_query($query); 
if (!$link) { 
echo 3; 
    die(); 
} 

$numrows=mysql_num_rows($link); 
if ($numrows>0){ // authentication is successfull 
$rows = array(); 
while($r = mysql_fetch_assoc($link)) { 
$rows[] = $r; 
} 
$json=json_encode($rows); 
echo $json; 
} else { 
echo 3; // authentication was unsuccessfull 
} 
?> 

И JQuery выглядит следующим образом:

$("#login").click(function(){ 

    username=$("#username").val(); 
    password=$("#password").val(); 

    $.ajax({ 
     type: "POST", 
     url: "scripts/sendLogDetails.php", 
     data: "username="+username+"&password="+password, 
     success: function(html){ 
      if(html=='true') 
      { 
      sessionStorage.setItem("user", $("#username").val()); 
      } 

      else 
      { 
       $("#add_err").html("Wrong username or password"); 
      } 

     }, 

    }); 
    return false; 
}); 

Приведенный выше код отправляет через имя пользователя и пароль, и когда я проверяю ответ в своем консольном журнале, он отображает данные из запрошенной таблицы. Мне интересно, как я могу получить эти данные, чтобы установить их в хранилище сеансов ???

+0

не смешивать данные типы для возвращаемых данных ... использовать json для обоих случаев на стороне сервера – charlietfl

+0

Что ты имеешь в виду? – Jason

ответ

1

Ваша функция успеха должна выглядеть эта success: function(data) {...

Затем данные объекта JSON но как строка. Затем вы используете var object=JSON.parse(data) для извлечения фактического объекта.

Вы можете делать все, что вы хотите с это, обращаясь к новому переменному object

EDIT

success: function(data) { 
    try { 
     object = $.parseJSON(data); 
    } catch (e) { 
     // here you didn't get JSON back so we can assume it was an error, run your error code in here. data will still be the error number (3) 
     return false; 
    } 
    //run your code on the json object here. 
} 

Перебора ОБЪЕКТА

for (var key in object) { 
    //this if just checks if the key has a value, it is required 
    if (object.hasOwnProperty(key)) { 
     var value=object[key]; 
     //then we need to put the key and the value into session storage 
     sessionStorage.setItem(key, value) 
    } 
} 
+1

Не могли бы вы показать мне пример того, как это сделать? Я изменяю функцию успеха, но не знаю, как получить доступ к данным json или установить оператор if: 'успех: функция (данные) { var object = JSON.parse (данные) if (data == '??? ') {' – Jason

+0

Насколько я могу судить,' data' будет либо возвращаться как строка JSON, либо просто одно целое '3', и в этом случае мы можем это сделать. – MarshallOfSound

+0

Редактирование ответа сейчас – MarshallOfSound

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