Ajax & PHP, responseText возвращает пустое

Я сделал регистрацию пользователей и систему входа на PHP. Это работает нормально, но сейчас я пытаюсь отправить запрос POST с Ajax, чтобы остаться на той же странице, и responseText возвращается пустым. Я пробовал некоторые решения, которые я видел в похожих вопросах, но ни одно из них не помогло мне.

Это функция php, которую я использую для входа в систему:

if(!empty($_POST)) { 
    $query = " 
        SELECT 
            id, 
            username, 
            password, 
            salt, 
            email 
        FROM users 
        WHERE 
            username = ? 
    "; 

    try {  
        $stmt = $db->prepare($query); 
        $stmt->bind_param("s", $_POST['username']);
        $result = $stmt->execute(); 
    } 
    catch(Exception $ex) { 
        die("Failed to execute the query"); 
    } 

    // Is logged in? 
    $login_ok = false; 

    $res = $stmt->get_result();
    $row = $res->fetch_assoc();

    if($row) { 
        // Hash the submitted password and compare it whit the hashed version that is stored in the database
        $check_password = hash('sha256', $_POST['password'] . $row['salt']); 

        for($n = 0; $n < 65536; $n++) { 
            $check_password = hash('sha256', $check_password . $row['salt']); 
        } 

        if($check_password === $row['password']) { 
            $login_ok = true; 
        } else {
            echo "Incorrect password";
        } 
    } 

    if($login_ok) { 
        unset($row['salt']); 
        unset($row['password']); 

        $_SESSION['user'] = $row; 

        echo "Logged in";
    } else { 
        echo "Login failed";
    } 
}

И это моя форма и функция Ajax:

<form action="" method="post">
    <fieldset>
        <legend>Login</legend>
        <input type="text" name="username" placeholder="user" value="" />
        <input type="password" name="password" placeholder="pass" value="" />
        <input type="button" id="log" value="Login" onclick="log()"/>
    </fieldset>
</form>

<script type="text/javascript">
    function log(){
        if (!window.XMLHttpRequest) return;
        var url = "php/login.php",
            req = new XMLHttpRequest();

        req.open("POST", url);
        req.send(null);

        req.onreadystatechange = function(){
            if(req.readyState == 4 && req.status == 200){
                var response = req.responseText;
                alert(response);
            }
        } 
    }
</script>

Есть идеи?

Редактировать: я пытаюсь не использовать JQuery, кстати.

1 ответ

Решение

Здесь добавлен ответ, чтобы его можно было принять и чтобы другие пользователи SO не заходили на эту страницу, думая, что это вопрос без ответа.

Проблема в вашем примере кода состоит в том, что данные POST не отправляются с запросом AJAX.

Поэтому ваше первое условие: if (!empty($_POST)) равняется FALSE и в результате не выполняется ни один код в условии.

Другие вопросы по тегам