1

我只是在做一个简单的登录脚本,但通过 ajax。

我在其他地方的 javascript 方面使用了相同的脚本,它一直很好,但这似乎不适用于我现在尝试的内容。

所以,我用这个来退货:

    $return['loginSuccess'] = true;
    echo json_encode($return);  

然后抓住回报:

    if (response.loginSuccess === true) {
        window.location = "index.php";
    } else {
        // error
    }

但是,发送返回时没有任何反应。我已经删除了 javascript 端,并且 login.php 页面显示它正在发送 loginSuccess = True 的响应。

看不出为什么它在其他脚本上工作,但没有发生任何事情。

这是完整的 javascript(我已删除验证以使其更短):

// JavaScript - Login AJAX

$(document).ready(function(){

// When the form is submitted
$('.loginbutton').click(function(){

    var check = true;

    // Get the values
    var usernamelogin = $('.logininputuser').val();
    var passwordlogin = $('.logininputpass').val();

    // Database validation checks
    if (check === true) {
    $.ajax({
    type: "POST",
    url: "process/login.php",
    data: $(".formlogin").serialize(),
    dataType: "json",
    success: function(response){

    if (response.loginSuccess === true) {
        window.location = "index.php";
    } else {
        // error
    }

    }
    });
}
        return false;
    });
});

和PHP:

<?php 
header('Content-Type: application/json');
require("../common.php"); 

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

if(!empty($_POST['loginbutton'])) { 
    $query = " SELECT id, username, password, salt, email FROM users WHERE username = :username "; 

    // Create bound values
    $query_params = array( 
        ':username' => $_POST['username'] 
    ); 

    try 
    { 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    $login_ok = false; 

    $row = $stmt->fetch(); 
    if($row) 
    { 

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

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

    // Sucsess for login
    if($login_ok) 
    { 
        unset($row['salt']); 
        unset($row['password']); 
        $_SESSION['user'] = $_POST['username'];
        $_SESSION['logged'] = "1";
        $return['loginSuccess'] = true;
        echo json_encode($return);                
    } 
    else 
    { 
        die();
    }

    } else if(!empty($_POST['regbutton'])) {

        header( 'Location: ../register.php' ) ;
    }
}

 ?> 

很抱歉这个冗长的问题,不确定是否可以查看此代码有什么问题,但如果可以的话,感谢您的帮助。

4

1 回答 1

-1

我认为你还没有解码 json 编码的字符串,所以它不起作用。试试这个代码。

var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" )

其中 '{ "name": "John" }' 是您的回复。

如需更多参考,请访问http://api.jquery.com/jQuery.parseJSON/使用 jQuery / AJAX 解码 JSON

于 2013-10-29T10:12:31.867 回答