jQuery使用PHP自行处理AJAX请求

时间:2012-01-12 03:16:57

标签: php jquery ajax

我有一个工作的php登录表单,我现在正尝试在同一页面中使用jquery ajax请求处理,但在提交具有正确凭据的表单后,我仍然收到“无效登录”消息。

jquery和ajax的新手,但我的代码如下。任何帮助有一点解释,所以我可以学习和理解而不是复制非常感谢谢谢!

以下是按此顺序在同一页面上。

PHP

<?php

if(isset($_POST['login'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $query = "SELECT * FROM table WHERE username='$username' AND password='$password'";
    $result = mysql_query($query)or die(mysql_error());
    $num_row = mysql_num_rows($result);
    $row=mysql_fetch_array($result);

    if( $num_row >=1 ) {
        session_start();
        $_SESSION['logged'] = TRUE;
        $_SESSION['user_name']=$row['username'];
        header('Location: index.php');
        exit();

    } else {
        echo "Invalid login. Please try again.";
        exit();
    }
}

?>

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="login/style.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {

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

    var action = $("#form1").attr('action');
    var form_data = {
        username: $("#username").val(),
        password: $("#password").val(),
        is_ajax: 1
    };       
    $.ajax({
        type: "POST",
        url: location.href,
        data: form_data,
        success: function(response)
        {
            if(response == 'success')
                $("#form1").slideUp('slow', function() {
                    $("#message").html("<p class='success'>You have logged in successfully!</p>");
                });
            else
                $("#message").html("<p class='error'>Invalid username and/or password.</p>");   
        }
    });       
    return false;
});   
});
</script>
</head>
<body>
<div id="content">
  <h1>Login Form</h1>
  <form id="form1" name="form1" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
      <input type="text" name="username" id="username" />

      <input type="password" name="password" id="password" />

      <input type="submit" id="login" name="login" value="Submit" />
  </form>
    <div id="message"></div>
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

问题是你实际上并没有告诉PHP输出任何东西,所以很明显,进行AJAX调用的页面在成功登录时都没有收到任何内容,nothing != 'success',这就是为什么它显示了错误页面。

当登录成功时,您应该回显'success'字符串。

...
if( $num_row >=1 )
{
    session_start();
    $_SESSION['logged'] = TRUE;
    $_SESSION['user_name']=$row['username'];
    header('Location: index.php');
    exit('success');
}
else
{
    exit('Invalid login. Please try again.');
}
...

答案 1 :(得分:0)

当你在jQuery中调用ajax时,你可以选择在成功时返回响应。在这种情况下,您通过jQuery检查是否response == 'success'。在PHP中,您永远不会输出'success' - 因此它将始终返回false。

试试这个:

if( $num_row >=1 )
{
    session_start();
    $_SESSION['logged'] = TRUE;
    $_SESSION['user_name']=$row['username'];
    echo "success";
    exit();
}
else
{
    exit();
}