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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX请求登录页面上的PHP文件相关的知识,希望对你有一定的参考价值。

我偶然发现了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字符串并且它显示正确的事情。

谢谢。

答案

这是错的:

contentType: 'application/json; charset=utf-8',

当您在data:中使用对象作为$.ajax选项时,它使用URL编码格式,而不是JSON。 json参数的值是JSON的事实是不相关的,它仍然包含在URL编码的参数中。你应该省略那个选项。

如果你这样做会更简单:

data: $data,

然后在PHP脚本中你可以使用$_POST['username']$_POST['password'],你不需要调用json_decode()

以上是关于AJAX请求登录页面上的PHP文件的主要内容,如果未能解决你的问题,请参考以下文章

ajax请求session失效重定向到登录页面

创建对 PHP 函数的 jQuery AJAX 请求

停用的用户重定向到从 ajax 请求登录

(转)博客园登陆__JSEncrypt 分析

使用php和ajax实现登录

从PHP登录请求获取空的AJAX响应