1

目的:
ユーザーがユーザー名とパスワードを入力してログイン ボタンをクリックするログイン フォームがあります(type="submit")。PHP コードからの戻り値にパターンが含まれているかどうかを特定しようとして"FailText"います。はいの場合はメッセージを div に表示し、そうで"signinAlert"ない場合 (ログインが成功した場合) はユーザーのホームページにリダイレクトします。

コード:

<form id="loginForm" name="loginForm" method="POST">
    <table>
        <tr>
            <td><input class="input_home" type="text" name="username" id="email" size="30" placeholder="E-mail Address" /></td>
        </tr>
        <tr>
            <td><input class="input_home" type="password" name="password" id="password" size="30" maxlength="12" placeholder="Password" /></td>
        </tr>
        <tr>
            <td style="text-align: right;"><a href="#" title="Forgot Password">Forgot Password?</a>&nbsp;&nbsp;<input type="submit" class="Button" value="Sign In" id="login" onclick="return DisplayLoginError()"; /></td>
        </tr>
    </table>
</form>

これが私のJavaScript関数です。

function DisplayLoginError()
{
    var loginForm = document.loginForm;

    var dataString = $(loginForm).serialize();

    $.ajax ({
        type: 'POST',
        url: 'login.php',
        data: dataString,
        success: function(data){
            var result = data;
            var patt1=new RegExp("FailText");
            if (patt1.test(result))
            {
                $('#signinAlert').html(data);
                $('#signinAlert').css('display','block');
            }
            else
            {
                window.location = "home/";
            }           
        }
    });
    return false;
}

質問: 上記の JavaScript コードは非常にずさんだと強く思います (ログイン試行が成功したときの RegExp 評価のため)。目的を達成する他の方法はありますか?ちなみに、上記の方法はすべての主要なブラウザで機能します。

4

2 に答える 2

3

これは私の好みのオプションです。完璧とは言えませんが、しばらく使っていたものです。すべてのエラー メッセージが JS ファイルではなく PHP に保存されていることを意味します (私が好む)。また、以下のコードはテストされていないことに注意してください。

編集JSではなくPHPのエラーを好む理由についてのメモです。私は通常、エラーを含むテーブルを持っています。つまり、エラーコードとメッセージを出力することができますoh this is ERR-002, output the message associated with it. 誰かが ERR-002 で電話をかけてきたら、DB をチェックするだけで済みます (コードを調べたりする必要はありません)。

login.php ページで、javascript がデコードできる json でエンコードされた配列を返すことができます。だからあなたのphpで:

<?php 

    $arrResult = array("message" => "Could not log you in", "type" => "error");
    // Or the success one:
    // $arrResult = array("message" => "You're logged in", "type" => "success"); 
    echo json_encode($arrResult);

?>

次に、このメッセージをデコードして、次のように JavaScript のオブジェクトとして使用できます。

function DisplayLoginError()
{
    var loginForm = document.loginForm;

    var dataString = $(loginForm).serialize();

    $.ajax ({
        type: 'POST',
        url: 'login.php',
        data: dataString,
        success: function(strResponse){
            var $objResponse = $.parseJSON(strResponse);

            if ($objResponse.type == "success")
            {
                 window.location = "home/";
            }
            else
            {
                 $('#signinAlert').html($objResponse.message).css('display','block');
            }           
        }
    });
    return false;
}
于 2013-08-05T07:27:32.650 に答える
2

うまく機能しますが、データの先頭または末尾にスペースがある場合、パターンと一致しない場合があるため、パターンをdata=$.trim(data);一致させる前に使用することをお勧めします

于 2013-08-05T07:16:41.030 に答える