登录页面上对PHP文件的AJAX请求

时间:2019-02-27 21:58:41

标签: php ajax

我偶然发现了PHP中的AJAX请求问题,但找不到与我在代码中已经写过的主题接近的主题。

首先,我想使用对PHP文件的AJAX请求为我的Web应用程序创建登录页面。

在“ login.php”中:

$(document).ready(function(){
        var $errorWrapper = $('#error-handler'); // Error div 
        var $errorCardText = $('#error-handler p'); // Error div text
        var $user = $('#user-input'); // Input field for username
        var $pwd = $('#pwd-input'); // Input field for password

        $('#login-btn').on('click', function(){

            var $data = {
            'username': $user.val(),
            'password': $pwd.val()
            };

            $dataStr = JSON.stringify($data);

            $.ajax({
                type: 'POST',
                url: 'php/loginValid.php',
                data: {json: $dataStr}, 
                dataType: 'JSON',
                contentType: 'application/json; charset=utf-8',
                success: function(data){
                    alert("Success");
                    if(data.status == 0){
                        $errorWrapper.css('display', 'block');
                        $errorCard.text("Username or password incorrect!");
                    }else if (data.status == 2){
                        $errorWrapper.css('display', 'block');
                        $errorCard.text("No matching account for username inserted.");
                    }
                }
            });
        });
    });

在“ loginValid.php”中(该文件正在捕获来自AJAX的POST请求):

<?php
include 'classes.php';

//Catch the AJAX POST request form server and decode it from JSON

    $request = json_decode($_POST['json'], true);
    $username = $request['username'];
    $password = $request['password'];

    $loginObj = new LoginValid($username, $password);
    $code = $loginObj -> checkValidation();

    $response = array('status' => $code);

    echo json_encode($response));?>

“ classes.php”文件实现了用于检查凭据的功能:

class LoginValid{
    private $username;
    private $pwd;
    private $statusCode;

    function __construct($user, $pass){
        $this->$username = $user;
        $this->$pwd = hash('sha512', $pass);
    }

    public function checkValidation (){

        include '../conf/db.php';

        $conn = new mysqli($servernameDB, $userDB, $passwordDB, $dbName);

        $stmt = $conn -> prepare ("SELECT FROM users WHERE username = ?");

        $stmt -> bind_param('s', $this->$username);

        $stmt -> execute();
        $stmt -> store_result();
        $result = $stmt -> get_result();
        $row = $result -> fetch_assoc();

        // Check if the credentials match and return the status code for jQuery error handler

        if ($result -> num_rows == 0){
            $this->$statusCode = 2;
        }else{

            if ($row['username'] == $this -> $username && $row['password'] == $this->$pwd){
                $this -> $statusCode = 1;
                session_start();
                $_SESSION['username'] = $username;
                $_SESSION['password'] = $password;
                header("Location: ../index.php");
            }else{
                $this -> $statusCode = 0;
            }
        }

        return $this -> $statusCode;
    }
}

“ db.php”仅存储数据库凭据,以便于在整个应用程序中轻松集成。

我不知道为什么它没有进入成功回调。我提到了一个事实,在发出AJAX请求之前,我已经尝试过警告JSON字符串,并且它显示正确的内容。

谢谢。

1 个答案:

答案 0 :(得分:0)

这是错误的:

public CheckingAccount(string name, double amount) : base(name,amount)
{

}

contentType: 'application/json; charset=utf-8', 中将对象用作data:选项时,它使用URL编码格式,而不是JSON。 $.ajax参数的值是JSON的事实并不重要,它仍然包装在URL编码的参数中。您应该忽略该选项。

如果您这样做,会更简单:

json

然后在PHP脚本中可以使用data: $data, $_POST['username'],而无需调用$_POST['password']