jquery - 对Grails Controller的JQuery Ajax请求不起作用

标签 jquery ajax grails

在下面的“简单” Ajax登录示例中,我使用JQuery将表单参数提交给Grail的 Controller 。但是,实际URL与ajax调用中配置的 Controller URL不匹配。

HTML:

<div id="loginForm">
        <div id="ajaxLoginError">
        </div>
        <form name="ajaxLoginForm" action="ajaxLogin" id="ajaxLoginForm">
            <span class="pic"></span>
            <span class="close"></span>
            <input type="text" name="username" class="text focus" default="Username"
                value="${user?.username}" />
            <input type="password" name="password" class="text focus"
                default="Password" value="${user?.password}" />
            <button type="submit" name="login" id="ajaxLoginBtn">
                <span class="button"><span>Login</span> </span>
            </button>
            <label> <input type="checkbox" class="check" name="remember" />Remember
                me</label>
            <a href="#">Forgot username or password?</a>
        </form>
    </div>

Javascript:
$('#ajaxLoginBtn').click(function() {
    $('#ajaxLoginError').fadeOut();
    $.ajax({
        url: "${createLink(controller: 'user', action: 'ajaxLogin')}",
        type: 'GET',
        data: queryString,
        dataType: 'json',
        success: function(data) {
            if (data.isAuthenticated) {
                // Display user bar
                $('#loginUserBar').slideDown();
            }else {
                $('#ajaxLoginError').html(data.errorMsg).fadeOut();
            }
        }
    });
});

另外,任何人都可以验证我的 Controller 逻辑。我收集这是解析JSON响应的正确方法?

服务器:
def ajaxLogin = {
    boolean isExists = false
    String errorMsg = ""
    def foundUser = User.findByEmailAndPassword(params.username, params.password) 
    if (foundUser) {
        isExists = true
    }else {
        errorMsg = "Login unsuccessful! Either the username, or password entered is incorrect."
    }
    render(content: 'text/json',
        loginResponse(isAuthenticated: isExists, errorMsg: errorMsg));
}

同样,我需要做些什么来显式强制Grails使用JQuery作为主要的javascript插件吗?

最佳答案

有很多不同的问题... :-)

1)我需要做些什么来显式强制Grails使用JQuery作为主要的javascript插件吗?

如果尚未安装jquery插件,请安装它。你也可以放一个

<g:setProvider library="jquery"/>

在GSP的开头(或布局中)显式地将JQuery设置为提供程序

2)这是解析JSON响应的正确方法吗?
    log.info("Receive send request");
    def contentType = request.getHeader('Content-Type')
    log.trace("receive with ContentType: " + contentType)
    if (contentType && contentType.contains('application/json')) {            
        def results = request.JSON
        log.info("results received : ${results}")
    }

您可以添加if (request.xhr){}以测试ajax调用

3)任何人都可以验证我的 Controller 逻辑。

逻辑本身无话可说,您可以检查现有的登录名/密码

4)实际URL与ajax调用中配置的 Controller URL不匹配。

仅凭您告诉我们的内容很难回答。 jQuery的ajax调用看起来不错,但是我们对queryString的内容一无所知。我通常使用$("#myForm").serialize()将表单发送给 Controller
我不明白您关于网址的问题...

关于jquery - 对Grails Controller的JQuery Ajax请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731111/

相关文章:

JQuery 使用最接近的 ("element.class")

javascript - 使用 JavaScript 和 CSS 创建悬停和点击

jquery - Ajax/jQuery : How to communicate Ajax call error back to user

grails - Grails 如何通过 HTTP 将配置加载到 WAR 外部?

jquery - 使用 jQuery 将 <object> 的所有实例更改为 &lt;iframe&gt; 以支持 IE

jQuery:从下拉列表中选择一个值后提交表单

javascript - Jquery Ajax 错误请求 400 Wordpress 小部件

javascript - 在 Ruby on Rails 中使用 rjs 实现 AJAX

grails - 在 Grails 中调用存储过程(一步一步)

grails findByDomain 返回 null