Ajax 跳过成功:函数调用

我正在使用 ajax、html 和 php 登录。我已经调试了 php,没问题,它返回了我在 ajax 调用中需要的 json 变量。我有这个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();


我做了并检查元素,用户名和密码没问题,login.php 被调用,但是当我从第 20 行继续检查时,这一直工作到第 25 行并跳到第 44 行,成功:函数(函数) 被跳过并且“响应”变量未定义但 login.php 是 returnint 这个变量确定:

我究竟做错了什么?


牧羊人nacy
浏览 111回答 2
2回答

白衣染霜花

好的,我已经解决了这个问题,所以我要发布我为那些有同样问题的人所做的事情:函数成功:函数(响应)正在从 login.php 中获取所有“回声”,所以登录正常时的第一个“回声”是麻烦和响应成为未定义的变量。当我使用错误的凭据发布时,我只有一个回声(json_encode)并且我对 ajax 没有问题。所以解决方案是这样的,在 php 中,在 if(password_verify) 之后: if (password_verify($password, $hash)) {&nbsp; &nbsp; &nbsp; $_SESSION['loggedin'] = true;&nbsp; &nbsp; &nbsp; $_SESSION['username'] = $row['username'];&nbsp; &nbsp; &nbsp; $_SESSION['start'] = time();&nbsp; &nbsp; &nbsp; setcookie("COOKIE_INDEFINED_SESSION", TRUE, time()+31622400);&nbsp; &nbsp; &nbsp; setcookie("COOKIE_DATA_INDEFINED_SESSION[username]", $username, time()+31622400);&nbsp; &nbsp; &nbsp; setcookie("COOKIE_DATA_INDEFINED_SESSION[password]", $password, time()+31622400);&nbsp; &nbsp; &nbsp; $respuesta["validacion"] = "ok";&nbsp; &nbsp; &nbsp; $respuesta["id"] = $row["idUser"];&nbsp; &nbsp; &nbsp; $respuesta["username"] = $row["username"];&nbsp; }else{&nbsp;&nbsp; &nbsp; $respuesta["validacion"] = "error";&nbsp; &nbsp; $respuesta["mensaje"] = "Contraseña incorrecta";&nbsp; }}else{&nbsp; $respuesta["validacion"] = "error";&nbsp; $respuesta["mensaje"] = "Usuario incorrecto";}&nbsp;mysqli_close($connection);&nbsp;// encoding array to json formatecho json_encode($respuesta);?>&nbsp;

元芳怎么了

为了从响应中获取值,您需要首先 JSON.parse() 以允许您自己使用 response.validacion
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript