2012-01-04 12 views
0

を働いていないので、私は、以下の「シンプルな」Ajaxのログイン例でjQueryのAjaxリクエストは、私はGrailsのにかなり新たなんだ、と一般的には、フロントエンド開発

...私と一緒に裸してくださいGrailのコントローラにフォームパラメータを送信するためにJQueryを使用しています。ただし、実際の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)); 
} 

同様に、私は明示的にメインjavascriptのプラグインとしてjQueryのを使用するようにGrailsを強制的に行うために必要なものはありますか?

おかげで、さまざまな質問がたくさんあります -Tom

答えて

1

...

1 :-))私は明示的にメインのjavascriptとしてjQueryのを使用するようにGrailsを強制的に行うために必要なものがありますプラグイン?

まだインストールされていない場合は、jqueryプラグインをインストールしてください。また、これはJSON応答を解析するための正しい方法です)明示的にプロバイダ

2としてはJQueryを設定するためにあなたのGSP(またはあなたのレイアウトで)の冒頭で

<g:setProvider library="jquery"/> 

を置くことができますか?

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}") 
    } 

あなたは、AJAXをテストするためにif (request.xhr){}を追加することができ、誰もが私のコントローラロジックを検証することができます)

3を呼び出します。

ロジック自体については何も言うことは、既存のログイン/パスワードの入力を

4をご確認ください)実際のURLは、Ajaxの呼び出しで構成されたコントローラのURLと一致していません。

あなたの話したことだけでは答えにくいです。 jQueryのajax呼び出しはうまくいくようですが、queryStringの内容についてはわかりません。私は通常$("#myForm").serialize()を使用してコントローラにフォームを送信します URLについてのあなたの問題を理解できません...

+0

こんにちはGrooveek、返信用のthx。 URLの問題については... grailsリンクメソッドを使用すると、/ myapp/user/ajaxLoginというURLを作成する必要があります。ただし、Ajax呼び出しが発生すると、実際のURLは/ myapp/ajaxLoginに解決されます。なぜGrailsがパス内のコントローラ名を省略しているのか、私は完全にはわかりません。どんなアイデアや提案も大歓迎です。 – princeTaj

+0

また、queryString変数については、基本的に$( '#ajaxLoginForm')。serialize()を代入した結果です。割り当てをコードスニペットに含めるのを忘れました。申し訳ありません:-o – princeTaj

+0

loginResponse(isAuthenticated:isExists、errorMsg:errorMsg)どのような可変ログイン応答は何ですか? – danielad

関連する問題