使用基于表单的身份验证登录页面出现问

时间:2010-05-21 06:58:05

标签: javascript ajax authentication

我想要一个登录页面,如果任何用户在点击提交按钮后输入无效密码或用户名,则用户将在同一页面上显示错误消息。

我应该如何启用此要求?这是可能的ajax或javascript?

1 个答案:

答案 0 :(得分:0)

是的,这可以通过Ajax实现。坦率地说,如果您使用PrototypejQueryClosure等库,这是最简单的,因为它们可以消除浏览器差异等等,并且有很多内置的 - 在功能上。

例如,这里有一个相当简洁的方法,您可以使用带有Prototype的Ajax提交表单并查看响应:

$('formid').request({
    onSuccess: function(response) {
        // Request succeeded, check result for whether login was valid
    }
});

(假设表单的id为“formid”。)

这是一个更完整的示例,它还显示了您如何挂钩提交过程。您可以通过在表单上挂钩submit事件并发送Ajax请求来触发该代码:

$('formid').observe('submit', function(event) {
    // Prevent the standard form submission
    event.stop();

    // Do it via Ajax instead, including an additional flag telling
    // the server that this is an Ajax call
    this.request({
        parameters: {viaAjax: true},
        onSuccess: function(response) {
            // Request succeeded, check result for whether login was valid
            if (response.responseJSON &&
                response.responseJSON.loginOkay) {
                // Login worked!
            }
        }
    });
});

以上做了以下事情:

  1. 在用户提交表单
  2. 时挂钩Javascript处理程序
  3. 通过取消通常的表单提交并发送Ajax调用来处理该事件
  4. 除了表单数据外,我们还包含一个viaAjax标志,告诉服务器我们通过Ajax发送表单
  5. 服务器应该期望表单在有或没有viaAjax标志的情况下到达。如果标志在那里,则表示浏览器支持Javascript并且表单以这种方式提交,因此它应该返回一个标志告诉我们登录是否正常(在上面我假设它将返回{{3} } -formatted data {"loginOkay": true},这意味着它应该将内容类型设置为application/json)。如果标志不是,则在浏览器上禁用Javascript,服务器应以正常方式处理表单提交,返回完整的HTML页面。 (无论是否启用Javascript,这种处理它的业务称为“渐进增强”或“优雅降级”。)