ajax - 使用Ajax和Grails显示登录错误

标签 ajax grails groovy

我正在使用UI的Grails + Twitter BootStrap开发一个小应用程序。在我的索引页面中,我有一个表单可以登录:

<g:form controller="user" action="login" id="form-login">
   <h2>Please, log in</h2>
   <g:textField name="userName" placeholder="Email address"/>
   <g:passwordField name="password" type="password" placeholder="Password"/>
   <button id="submitConnection" type="submit">Connection</button>
</g:form>

这是我的用户 Controller :
def login(){
    String userName = params.userName
    String password = params.password

    User user = userName ? User.findByUserName(userName) : null
    //If login succeed
    if(user?.password == password){
        session.user = user
        redirect(action: 'index')
    }
    //If login failed
    else{
        render 'Email or password incorrect.'
    }
}

我正在尝试通过JQuery使用Ajax。我不熟悉Ajax / JQuery,所以不确定自己做得如何。实际上,我想在单击“提交”按钮时发出Ajax请求。所以我在js中写了这个:
$('#submitConnection').click(function() {
  var request = $.ajax({
      url: "/user/login",
      data: { userName: "dummy", password: "dummy"}
  });

  request.done(function ( data ) {
      if( data ) {
          console.log(data);
      }
  });
  request.fail(function(jqXHR, textStatus) {
      alert( "Request failed: " + textStatus );
      });
});

我想在登录失败时使用诸如“登录失败”之类的错误消息填充div,如果成功,则只需重定向至索引。我想我必须使用JQuery来做到这一点。我错了吗 ?

我真的不知道我必须修改/添加 Controller 中的内容以将某些内容发送到Ajax。

在此先感谢您的帮助。

最好的祝福。

最佳答案

首先,与您的 Controller 打交道,将重定向发送回ajax请求根本不够用。并且当身份验证失败时,您的JavaScript怎么知道?因此,我们应该稍微调整一下 Controller 代码:

def login(){
    String userName = params.userName
    String password = params.password

    User user = userName ? User.findByUserName(userName) : null
    //If login succeed
    if(user?.password == password){
        session.user = user
        render(contentType: 'text/json') {
          [success: true, message: 'Login successful']
        }
    }
    //If login failed
    else{
        render(contentType: 'text/json') {
          [success: false, message: 'Email or Password incorrect']
        }
    }
}

现在,关于您的JavaScript,我将从这里开始:
$('#submitConnection').click(function(e) {
  e.preventDefault(); // prevents normal event of button submitting form
  $.post("/user/login", {userName: "dummy", password: "dummy"}, function(data) {
     if (data.success) {
        window.location = "some/path"; 
     } else {
        $("#error-message").html(data.message).show(); 
     }
  });
});

然后是您的HTML:
<g:form controller="user" action="login" id="form-login">
   <h2>Please, log in</h2>
   <div id="error-message" class="hide"></div>
   <g:textField name="userName" placeholder="Email address"/>
   <g:passwordField name="password" type="password" placeholder="Password"/>
   <button id="submitConnection" type="submit">Connection</button>
</g:form>

关于ajax - 使用Ajax和Grails显示登录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324570/

相关文章:

javascript - 从服务器返回 Javascript 对象

javascript - 如何渲染包含 form_for 的编辑功能的部分?

ajax - 急于实现grails服务器端触发的对话框,或如何在AJAX调用后突破更新区域

java - 从 java 执行 groovy 脚本时如何阻止对某些类的访问?

javascript - Ajax/Jquery 表单无法工作

javascript - 在 javascript 中加载 jQuery/ajax

grails - Grails createCriteria复制结果

hibernate - GORM 不工作。由 : org. hibernate.HibernateException 引起的错误:没有为当前线程找到 session

list - Groovy - 如何根据元素的内容从列表中删除元素?

regex - 为什么 Groovy 不支持我的正则表达式中的 "OR"实例?