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

$.ajax()(他の jQuery ajax メソッドと同様に) デフォルトでは非同期で動作するため、常に false を返します。コールバック内ですべてのイベント処理を行う必要があります (successたとえば、コールバックなど)。

また、私はしないことをお勧めします: if (result == '0')。代わりに、を使用して===ください。

理想的には、代わりに JSON を返すか、少なくとも true、false、0、1 などではない値を返す必要があります。これら 4 つの値 (およびその他の値) は、JavaScript のブール値の処理に関して簡単に混同される可能性があります。

于 2012-04-10T19:14:23.733 に答える
0

returnコールバック関数 (successおよびerror) のいずれかが呼び出される前にステートメントが実行され、 のクリック ハンドラー関数の戻り値で何も行われていないように見えるという事実は別として$("#submit_login")、何が起こっている可能性がありますか?イベントでAJAX 呼び出しを行うclickと、ブラウザーはフォーム ポストも送信します。これ#submit_loginは、submitタイプ ボタンであるためclickです。ハンドラーfalseをヒットする代わりに戻ります)。success非送信タイプのボタンに変更します。

<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 に答える