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

这是我的首选。不是说它是完美的,但它是我已经使用了一段时间的东西。只是意味着您所有的错误消息都存储在 PHP 中,而不是存储在您的 JS 文件中(我更喜欢)。另请注意,以下代码未经测试。

编辑只是说明为什么我更喜欢 PHP 而不是 JS 中的错误。我通常有一个表格,里面有我的错误,这意味着我可以通过说输出错误代码和消息oh this is ERR-002, output the message associated with it。当有人用 ERR-002 打电话时,我只需要检查数据库(而不是拖网代码)。

在您的 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 回答