簡體   English   中英

Ajax 跳過成功:function 調用

[英]Ajax is skipping success:function call

我正在使用 ajax、html 和 php 登錄。 我已經調試了 php,沒關系,它返回了我在 ajax 調用中需要的 json 變量。 我有這個 ajax function:

  $(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 代碼:(我知道在 cookies 中保存密碼真的很糟糕,但這是我現在的解決方案)

<?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 行 aprox 並跳到第 44 行,成功:function(function ) 被跳過並且“響應”變量未定義,但 login.php 返回此變量 ok:

我究竟做錯了什么? (對不起我的英語,我說西班牙語)

好的,我已經解決了這個問題,所以我將發布我為那些有同樣問題的人所做的事情:

function 成功:功能(響應)正在從登錄中獲取所有“回聲”。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);
?> 

為了從響應中獲取值,您需要首先 JSON.parse() 它允許您自己使用 response.validacion

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM