Ajax登录问题

我遇到了Ajax登录功能问题。 还有另一个类似于我能找到的问题,但它没有用。

我不知道是什么问题,这对另一个程序也有效,没有问题,希望有人能看到我的错误

从测试中我认为问题出现在“checkLogIn”函数中,因为当我运行应用程序时,函数中的警告显示

阿贾克斯:

$("#checkLogIn").click(function()
{

    $.ajax({
        type: 'POST',
        contentType: 'application/json',
        url: rootURL + '/logIn/',
        dataType: "json",
        data: checkLogIn(),
    })
        .done(function(data)
        {
            if(data == false)
            {
                alert("failure");
            }
            else
            {
                alert("Success");
                $.mobile.changePage("#page");
            }
        })
        .always(function(){})
        .fail(function(){alert("Error");});
});

function checkLogIn()
{       
    alert();
    return JSON.stringify({
        "userName": $("#enterUser").val(),
        "password": $("#enterPass").val(),
    });
}

我也会包含PHP,但PHP在测试后会100%正常工作。

PHP:

$app->post('/logIn/', 'logIn');
function logIn()
{
    //global $hashedPassword;

    $request = SlimSlim::getInstance()->request();
    $q = json_decode($request->getBody());
    //$hashedPassword = password_hash($q->password, PASSWORD_BCRYPT);


    $sql = "SELECT * FROM users where userName=:userName AND password=:password";
    try {
        $db = getConnection();
        $stmt = $db->prepare($sql);         
        $stmt->bindParam("userName", $q->userName);
        $stmt->bindParam("password", $q->password);
        $stmt->execute();
        //$row=$stmt->fetch(PDO::FETCH_ASSOC);
        //$verify = password_verify($q->password, $row['password']);

        $db = null;
        //if($verify == true)
        //{
        //  echo "Password is correct";
        //}
        //else
        //  echo "Password is incorrect";

    echo "Success";

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

我已经评论过任何和所有的哈希,直到我可以正常工作


ajax脚本没有问题。 从我的假设你总是得到Error警报。 这是因为你添加了dataType: "json",这意味着你正在请求rootURL + '/logIn/'作为json Object的响应。 但在PHP中,您只需将Success作为纯文本回显。 这使得ajax进入失败功能。 所以,你需要发送响应为json。 有关ajax中的contentTypedatatype更多详细信息,请参阅此链接。

所以你需要改变echo "Success"; echo json_encode(array('success'=>true)); 在PHP文件中。 现在你会得到Success警报。 下面我添加了一个很好的方式来处理php文件中的json_encoded响应。

$app->post ( '/logIn/', 'logIn' );
function logIn() {
    global $hashedPassword;
    $request = SlimSlim::getInstance ()->request ();
    $q = json_decode ( $request->getBody () );
    $hashedPassword = password_hash($q->password, PASSWORD_BCRYPT);

    $sql = "SELECT * FROM users where userName=:userName";
    try {
        $db = getConnection ();
        $stmt = $db->prepare ( $sql );
        $stmt->bindParam ( "userName", $q->userName );
        $stmt->execute ();
        $row=$stmt->fetch(PDO::FETCH_ASSOC);
        $verify = false;
        if(isset($row['password']) && !empty($row['password']))
            $verify = password_verify($hashedPassword, $row['password']);

        $db = null;
        $response = array();
        $success = false;
        if($verify == true)
        {
            $success = true;
            $response[] = "Password is correct";
        }
        else
        {
            $success = false;
            $response[] = "Password is incorect";
        }

        echo json_encode(array("success"=>$success,"response"=>$response));
    } catch ( PDOException $e ) {
        echo $e->getMessage ();
    }
}

我修改了ajax代码。 在那里我向你展示了如何从json_encoded Object得到响应。

$("document").ready(function(){
    $("#checkLogIn").click(function()
    {
        var post_data = JSON.stringify({
            "userName": $("#enterUser").val(),
            "password": $("#enterPass").val(),
        });
        $.ajax({
            type: 'POST',
            contentType: 'application/json',
            url: rootURL + '/logIn/',
            dataType: "json",
            data: post_data,
        })
        .done(function(data)
        {
            // data will contain the echoed json_encoded Object. To access that you need to use data.success.
            // So it will contain true or false. Based on that you'll write your rest of the code.
            if(data.success == false)
            {
                var response = "";
                $.each(data.response, function(index, value){
                    response += value;
                });
                alert("Success:"+response);
            }
            else
            {
                var response = "";
                $.each(data.response, function(index, value){
                    response += value;
                });
                alert("Failed:"+response);
                $.mobile.changePage("#page");
            }
        })
        .always(function(){})
        .fail(function(){alert("Error");});
    });
});

希望能帮助到你。

链接地址: http://www.djcxy.com/p/46167.html

上一篇: Ajax login issues

下一篇: jquery Ajax Doesn't Send JSON Data