0

ユーザーをサイトに認証するためにこのjQueryを使用していますが、login.phpによって返される成功/エラーに対して2つのアクションを実行するにはどうすればよいですか?成功したときにページを更新し(たとえば)、login.phpでログイン情報が成功しなかった場合にエラーメッセージを投稿することは可能ですか?私の質問が明確であることを願っています。これがコードです。今のところ、login.phpからのデータ出力を貼り付けるだけで、サーバー側で返される成功/エラーを分離する方法がわかりません。

$("#form-login").submit(function(event) {
    event.preventDefault();
    var $form = $( this ),
        log = $form.find( 'input[name="log"]' ).val(),
        pwd = $form.find( 'input[name="pwd"]' ).val(),
        rememberme = $form.find( 'input[name="rememberme"]' ).val();
    $.post( '/ajax/login.php', { log: log, pwd: pwd, rememberme: rememberme },
        function(data) {
            $(".form-login-status").html(data);
        }
    );
});
4

3 に答える 3

2

サーバーサイドスクリプトで、次のようにステータスとメッセージを返します。

$result = array();

if (login_is_successful()) {
    $result['status'] = true;
    $result['message'] = "Logged in";
} else {
    $result['status'] = false;
    $result['message'] = 'Incorrect password';
}

echo json_encode($result);

これにより、クライアント側のコードで特別に処理しなくても、サーバー側から応答メッセージを送信できる柔軟性が得られます。明日、「不正なユーザー名」と「不正なパスワード」のメッセージを別々に送信したい場合は、JSを変更せずに送信でき$result['status']ますfalse

次に、の成功ハンドラーで、次のよう$.postにします。

success : function(resp) {
    if (resp.status) {
        //user logged in
        //refresh page
        window.location.reload();
    } else {
        //failed authentication
        alert(resp.message);
    }
}

必ず設定してくださいdataType: 'json'

重要な注意点:

認証が失敗した場合、のerorrハンドラーは$.post呼び出されないため、成功ハンドラーで失敗した認証を確認する必要があります。

エラーハンドラは、POSTリクエストの作成中にエラーが発生した場合にのみ呼び出されます。

于 2012-05-24T23:14:25.470 に答える
0

確かに、それはドキュメントにあります:

$.post("example.php", {},  function() {
      alert("success");
    })
    .success(function() { alert("second success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });
于 2012-05-24T23:11:18.840 に答える
0

'success'ハンドラーでは、要求されたURIによって返されるフラグを処理する必要があります。このフラグは、資格情報がユーザーを認証したかどうかを示します。そのロジックに基づいてロジックを分岐する必要があります。

于 2012-05-24T23:14:00.230 に答える