4

我已经看了 1000 遍了。我不明白为什么它不起作用。

这是一个简单的 ajax 登录表单。即使凭据正确,它也会返回 false。(我通过直接发布到它来测试 ajax_login.php)

阿贾克斯功能:

$(document).ready(function() {
$("#submit_login").click(function() {


var username = $("#username").val();
var password = $("#password").val();

    $.ajax({

        type: "POST",
        url: "scripts/ajax_login.php",
        data: "username=" + username + "&password=" + password,
        success: function(result) {
            if(result == '0')
            {
                $(document.location = 'index.php?    page=profile&user=' + username);
            }
            else
            {
                $("#login_error").show("fast");
            }
        }
    });         
    return false;
});
});

ajax_login.php

session_start();
require('../conf/config.php');

if($_POST)
{

$u = mysql_real_escape_string($_REQUEST['username']);
$p = md5(mysql_real_escape_string($_REQUEST['password']));

$con = mysql_connect($mysql_server,$mysql_user,$mysql_password);
$db = mysql_select_db($mysql_db);

$query = mysql_query("SELECT * FROM users WHERE username = '$u' AND password = '$p'");

if(mysql_num_rows($query) > 0)
{
    $sid = session_id();
    $query = "UPDATE users SET sid='$sid' WHERE username='$u'";
    $result = mysql_query($query);

    if($result)
    {
        $_SESSION['loggedin'] = $u;
        echo '0';
    }
}
}

形式:

<div class="login_form">
<form action="scripts/ajax_login.php" method="POST">
Login<br /><br />
Username: <br />
<input type="text" name="username" id="username" /> <br />
Password: <br />
<input type="password" name="password" id="password" />
</div>
<input type="checkbox" name="remember" id="rem" value="checked"/><label for="rem">Stay logged in?</label><br />
<?php $formKey->outputKey(); ?>
    <input type="submit" value="Login!" name="submit" id="submit_login" />
   </form>
4

3 回答 3

3

它总是会返回 false,因为$.ajax()(与其他 jQuery ajax 方法一样)默认情况下异步操作。您将需要在回调中进行所有事件处理(例如,您的success回调)。

另外,我建议不要这样做:)if (result == '0'。相反,使用===.

理想情况下,您应该返回 JSON,或者至少返回非真、假、0、1 等。当涉及到 JavaScript 的布尔处理时,这四个值(和其他值)很容易混淆。

于 2012-04-10T19:14:23.733 回答
0

未经测试,但你应该试试这个:

$.ajax({
    type: "POST",
    url: "scripts/ajax_login.php",
    data: {"username":username, "password":password},
    success: function(result) {
        if(result==='0')
        {
            $(document.location = 'index.php?page=profile&user='+username);
        }
        else
        {
            $("#login_error").show("fast");
            return false;
        }
    }
});
于 2013-07-19T14:12:29.963 回答
0

除了在调用您的任何一个回调函数 (和)return之前执行该语句这一事实之外,似乎没有对 click 处理程序函数的返回值做任何事情 for ,可能发生的事情是尽管您在事件上进行 AJAX 调用时,浏览器也在提交表单发布,因为它是一个类型按钮 - 无论是否正在执行 AJAX 调用,页面都会在表单提交时重新加载(因此看起来好像处理程序是返回而不是击中您的处理程序)。将其更改为非提交类型按钮:successerror$("#submit_login")click#submit_loginsubmitclickfalsesuccess

<input type="button" value="Login!" name="submit" id="submit_login" />

还有其他方法可以做到这一点,例如preventDefault在您的处理程序中使用 Javascript,如下所示:

$("#submit_login").click(function(ev) {
    ev.preventDefault();
    //Rest of code...

正如我之前所说,这里似乎根本没有使用返回值,所以你真的不需要它来返回 false。无论做什么需要都可以放入success/error处理程序。

于 2012-04-12T12:03:46.877 回答