Ajax пропускает успех: вызов функции - PullRequest
0 голосов
/ 11 ноября 2019

Я делаю логин с ajax, html и php. Я уже отладил php, все в порядке, и он возвращает переменную json, которая мне нужна в вызове ajax. У меня есть функция ajax:

  $(document).ready(function(){
       $('#login').submit(function() { 
           var username=$("#username").val();
            var password=$("#password").val();
                $.ajax({

                url: 'login.php',
                data: {
                       username: username, 
                       password: password
                      },
                type: 'post',
                dataType: 'json',

                success:function(response){
                    alert(response);
                    if(response.validacion == "ok"){

                        alert("Bienvenidos"),
                        localStorage.loginstatus = "true",                      
                        window.location.assign("home.php");
                    }
                    if(response.validacion == "error"){
                        window.location.assign("login.html"),
                        alert("Datos de usuario incorrectos, inténtelo nuevamente");
                    }   
                }
            });
        });
    });

Это код login.php: (я знаю, что сохранить пароль в cookie-файлах действительно плохо, но сейчас это мое решение)

<?php
 session_start();
?>
<?php
include 'conexion.php';
if(isset($_POST['username'] && $_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}
  $sql = "SELECT * FROM User WHERE username = '$username' OR Email ='$username'";

  $result = $connection->query($sql);

if ($result->num_rows > 0) {

 $row = $result->fetch_array(MYSQLI_ASSOC);
 $hash = $row['password'];
if (password_verify($password, $hash)) { 
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $row['username'];
    $_SESSION['start'] = time();

    setcookie("COOKIE_INDEFINED_SESSION", TRUE, time()+31622400);
    setcookie("COOKIE_DATA_INDEFINED_SESSION[username]", $username, time()+31622400);
    setcookie("COOKIE_DATA_INDEFINED_SESSION[password]", $password, time()+31622400);
    echo "Sesión abierta indefinidamente.<br/>";

      $respuesta["validacion"] = "ok";
      $respuesta["id"] = $row["idUser"];
      $respuesta["username"] = $row["username"];
}else{ 
    $respuesta["validacion"] = "error";
    $respuesta["mensaje"] = "Contraseña incorrecta";

}mysqli_close($connection); 
}else{
$respuesta["validacion"] = "error";
$respuesta["mensaje"] = "Usuario incorrecto";
}mysqli_close($connection); 
// encoding array to json format
echo json_encode($respuesta);
?>

Я сделал и проверил элемент, имя пользователя и пароль в порядке, вызывается login.php, но когда я продолжаю проверку из строки 20, это работает до тех пор, пока строка 25 не приблизится и не перейдет к строке 44, успех: функция (функция) пропускается, а переменная «response» не определена, но login.php возвращается в эту переменную ok:

Что я делаю неправильно? (извините за мой английский, я говорящий по-испански)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Хорошо, я решил проблему, поэтому я опубликую то, что я сделал для тех, у кого такая же проблема:

функция success: function (response) принимает ВСЕ "echo "из login.php, поэтому первое« echo », когда логин в порядке, - это проблема, и ответ становится неопределенным var. Когда я пишу с неправильными учетными данными, у меня есть только одно эхо (json_encode), и у меня не было проблем с ajax. Таким образом, решение будет следующим: в php после if (password_verify): if (password_verify ($ password, $ hash)) {

      $_SESSION['loggedin'] = true;
      $_SESSION['username'] = $row['username'];
      $_SESSION['start'] = time();

      setcookie("COOKIE_INDEFINED_SESSION", TRUE, time()+31622400);
      setcookie("COOKIE_DATA_INDEFINED_SESSION[username]", $username, time()+31622400);
      setcookie("COOKIE_DATA_INDEFINED_SESSION[password]", $password, time()+31622400);

      $respuesta["validacion"] = "ok";
      $respuesta["id"] = $row["idUser"];
      $respuesta["username"] = $row["username"];
  }else{ 
    $respuesta["validacion"] = "error";
    $respuesta["mensaje"] = "Contraseña incorrecta";

  }
}else{
  $respuesta["validacion"] = "error";
  $respuesta["mensaje"] = "Usuario incorrecto";
}
 mysqli_close($connection); 

// encoding array to json format
echo json_encode($respuesta);
?> 
0 голосов
/ 11 ноября 2019

Чтобы получить значение из ответа, вам сначала нужно JSON.parse (), чтобы позволить себе использовать response.validacion

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...