使用ajax与javascript提示验证密码


Use ajax to verify password with javascript prompt

在一个网页内,我试图实现一个按钮来提示用户密码,以便注销。我想做的是使用javascript提示来请求它,然后通过AJAX将其发送到php文件,该文件将验证密码是否正确,如果是,它将返回到索引。到目前为止,我所做的尝试如下:

HTML:

<button style="" type="submit" class="" onclick='checkPass()'>              
        Logout
</button>
<script>
function checkPass()
{
    var usr = "<?php echo $usr = $_POST['usr']; ?>";
    var pass=prompt("Please write your password","");
    if (pass!=null && pass!="")
    {
        $.post("check.php", {pass: pass, usr:usr});
    }
}
</script>

Check.php:

<?php
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
$pass = mysql_escape_string($_POST['pass']);
$usr = mysql_escape_string($_POST['usr']);
$sql = mysql_query("SELECT * FROM USERS WHERE Usr='$usr' and Password='$pass'");
$count=mysql_num_rows($sql);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
    header("location:index.php");
}
else {
}
?>

这就是我所拥有的,但没有发生任何事情(我没有得到任何响应)…(

谢谢你的帮助!

This:

if($count==1){
    header("location:index.php");
}

没有做你认为它在做的事。请记住,此请求是通过AJAX发出的,而不是作为主浏览器窗口发出的。这种性质的重定向实际上并没有告诉浏览器做任何事情,它只是发送一个带有特定标头的特定响应类型。通常,这个向浏览器建议应该向另一个页面(在本例中为index.php)发起一个新的请求。浏览器通常会执行此请求。

但是,AJAX有点不同。服务器端代码仍然发送带有相同头的相同响应类型,但是浏览器不是发出请求的那个。JavaScript代码如下。JavaScript代码不会自动按照这个建议重定向用户。你得自己去做。

AJAX请求和响应通常应该只包含数据。这样就可以将一些数据发送回客户端。您可以对一些值进行JSON编码,但在这种情况下,像下面这样简单的操作就可以达到目的:
if($count==1){
    echo "true";
}
else {
    echo "false";
}

然后在客户端回调中,检查该值并做出相应的响应:

$.post("check.php", {pass: pass, use:use}, function (response) {
    if (response == 'true') {
        // redirect the user
    } else {
        // authentication failed
    }
});

在JavaScript中执行重定向很容易。


编辑:在控制台上我得到的错误:ReferenceError:找不到变量:$ $.post("check.php", {pass: pass, usr:usr});

嗯,在这种情况下,听起来你还没有加载jQuery库。为了使用jQuery代码,您需要这样做。