Запрос Ajax возвращает '200 OK' - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь сделать систему регистрации и входа в систему для моей домашней работы. Я выполнил регистрационную часть так же, как эта, но я не могу войти, она всегда вызывает событие ошибки (что-то пошло не так!), Status - 200, а StatusText - OK. Я пытался изменить dataType на TEXT, echo json_encode("x") до echo "x" и отредактировал метод успеха / ошибки в соответствии с этим, но ничего не изменилось.

Ajax Запрос:


    $.ajax({
        type : 'POST',
        url : 'functions/loginHandler.php',
        dataType : 'JSON',
        data : {
            email : email,
            password : password
        },

        success : function(data) {
            switch(data) {
                case "emailNotExists" :
                    notifier.alert("Email not found");
                    break;
                case "loginFailed" :
                    notifier.alert('Invalid login credentials');
                    break;
                case "loginSuccessful" :
                    notifier.success('Login Successful');
                    setTimeout(function () {
                        window.location.href = "index.php";
                    },2000);
                    break;
            }
        },

        error : function(data) {
            notifier.alert('Something went wrong!');
            console.log(data);
        }

    });

loginHandler.php


    if (isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])){
        $username = $_POST['username'];
        $password = $_POST['password'];

        $login = new Library();
        $login->login($username, $password);
    }

Login Method :

        public function login($username, $password) {
        try {
            $db = DB();
            $query = $db->prepare("SELECT userID FROM users WHERE username = :username");
            $query->bindParam("username", $username);
            $query->execute();
            if($query->rowCount() == 0) {
                echo json_encode("usernameNotExists");
            } else {
                $querySecond = $db->prepare("SELECT userID FROM users WHERE (username = :username AND password = :password)");
                $querySecond->bindParam("username", $username);
                $encPassword = hash("sha256", $password);
                $querySecond->bindParam("password", $encPassword);
                $querySecond->execute();
                if ($querySecond->rowCount() > 0) {
                    $result = $querySecond->fetch(PDO::FETCH_OBJ);
                    $_SESSION["userID"] = $result->userID;
                    echo json_encode("loginSuccessful");
                } else {
                    echo json_encode("loginFailed");
                }
            }

        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

Редактировать: Я осознал свою ошибку, я отправлял письмо, но проверяя имя пользователя, большое спасибо за вашу помощь. Я потратил почти 2 часа на эту ошибку. :)

1 Ответ

0 голосов
/ 17 мая 2019

200 означает, что ваш запрос AJAX был отправлен, и с сервера не было получено никакой ошибки. Тогда это не проблема AJAX.

В ответе AJAX ничего нет, потому что ваш php-процесс ничего не возвращает.

Это должно быть работой ...

if (isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $login = new Library();
    echo $login->login($username, $password);
}

Метод входа:

public function login($username, $password) {
    try {
        $db = DB();
        $query = $db->prepare("SELECT userID FROM users WHERE username = :username");
        $query->bindParam("username", $username);
        $query->execute();
        if($query->rowCount() == 0) {
            return json_encode("usernameNotExists");
        } else {
            $querySecond = $db->prepare("SELECT userID FROM users WHERE (username = :username AND password = :password)");
            $querySecond->bindParam("username", $username);
            $encPassword = hash("sha256", $password);
            $querySecond->bindParam("password", $encPassword);
            $querySecond->execute();
            if ($querySecond->rowCount() > 0) {
                $result = $querySecond->fetch(PDO::FETCH_OBJ);
                $_SESSION["userID"] = $result->userID;
                return json_encode("loginSuccessful");
            } else {
                return json_encode("loginFailed");
            }
        }

    } catch (PDOException $e) {
        exit($e->getMessage());
    }
}

Обратите внимание, что $login->login($username, $password); является методом и должен возвращать что-то, не используя echo.

Затем замените все echo на return и покажите ответный ответ, используя echo $login->login($username, $password);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...