在下面的“简单” 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/