为了账号安全,请及时绑定邮箱和手机立即绑定

Ajax 跳过成功:函数调用

Ajax 跳过成功:函数调用

牧羊人nacy 2021-12-23 14:30:31
我正在使用 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();?><?phpinclude '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 这个变量确定:我究竟做错了什么?
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

好的,我已经解决了这个问题,所以我要发布我为那些有同样问题的人所做的事情:


函数成功:函数(响应)正在从 login.php 中获取所有“回声”,所以登录正常时的第一个“回声”是麻烦和响应成为未定义的变量。当我使用错误的凭据发布时,我只有一个回声(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);

?> 


查看完整回答
反对 回复 2021-12-23
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

为了从响应中获取值,您需要首先 JSON.parse() 以允许您自己使用 response.validacion


查看完整回答
反对 回复 2021-12-23
  • 2 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信