我是相當新的Grails的,和一般的前端開發,所以請與我裸...JQuery的Ajax請求的Grails控制器不工作
在下面的「簡單」的Ajax登錄例子,我使用JQuery將表單參數提交給Grail的控制器。但是,實際的URL與ajax調用中配置的控制器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();
}
}
});
});
而且,任何人都可以驗證我的控制器邏輯。我收集這是解析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插件?
感謝, -Tom
嗨Grooveek,thx回覆。至於URL問題...使用grails鏈接方法應創建給定的URL:/ myapp/user/ajaxLogin。但是,當Ajax調用觸發時,實際的URL會解析爲:/ myapp/ajaxLogin。我不完全確定爲什麼Grails在路徑中省略了控制器名稱。歡迎任何想法或建議。 – princeTaj 2012-01-04 19:32:50
另外,對於queryString變量,它基本上是分配$('#ajaxLoginForm')。serialize()的結果。我忘了將代碼包含在代碼片段中。道歉:-o – princeTaj 2012-01-04 19:39:15
loginResponse(isAuthenticated:isExists,errorMsg:errorMsg)什麼是varible loginResponse DO或用於? – danielad 2013-06-24 10:11:32