2012-01-04 73 views
0

我是相當新的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

回答

1

有很多不同的問題... :-)

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)任何人都可以驗證我的控制器邏輯。

沒什麼可說的邏輯本身,你檢查現有登錄/密碼

4)實際地址不匹配Ajax調用配置的控制器URL。

只有你告訴我們的東西很難回答。 jQuery的ajax調用看起來不錯,但我們不知道你的queryString的內容。我通常使用$("#myForm").serialize()發送到控制器的形式 我不明白你的URL有關的問題,雖然...

+0

嗨Grooveek,thx回覆。至於URL問題...使用grails鏈接方法應創建給定的URL:/ myapp/user/ajaxLogin。但是,當Ajax調用觸發時,實際的URL會解析爲:/ myapp/ajaxLogin。我不完全確定爲什麼Grails在路徑中省略了控制器名稱。歡迎任何想法或建議。 – princeTaj 2012-01-04 19:32:50

+0

另外,對於queryString變量,它基本上是分配$('#ajaxLoginForm')。serialize()的結果。我忘了將代碼包含在代碼片段中。道歉:-o – princeTaj 2012-01-04 19:39:15

+0

loginResponse(isAuthenticated:isExists,errorMsg:errorMsg)什麼是varible loginResponse DO或用於? – danielad 2013-06-24 10:11:32