1

Grails コントローラーで afterInterceptor を使用する場合、次のようにします。

def afterInterceptor = [action: trackPageView, only: 'show']


private trackPageView = { model ->
  // so something
}

def show() { 
  def user = User.get(params.id)
  if (request.xhr)
     render view:'show', model: [user: user]
  else 
     [user: user]
}

これは ajax 以外のリクエストではうまく機能しますが、Ajax リクエストではモデルは常に [:] です。

Ajax リクエストの trackPageView でユーザー オブジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

1

ajax と非 ajax の両方のリクエストをサポートするには、コンテンツ ネゴシエーションを行って、それぞれのレスポンスを返す必要があります。ドキュメントから直接の例を次に示します。

import grails.converters.JSON
import grails.converters.XML

class BookController {
  def list() {
    def books = Book.list()

    withFormat {
      html bookList: books
      json { render books as JSON }
      xml { render books as XML }
    }
  }
}

更新:元の回答を参照とコンテキストとして残します。これが、意図した質問に対する回答/提案です。

ajax 以外の呼び出しが機能していて、trackPageViewクロージャーに渡されたモデルからユーザー オブジェクトを取得できると仮定すると、次のことを確認できます。

  • ajax 呼び出しと非 ajax 呼び出しでまったく同じ URL を呼び出していますか?
  • ajax 呼び出しと非 ajax 呼び出しの両方に同じパラメーター (ユーザー ID など) を渡していますか?

両方に「はい」の場合、技術的にはtrackPageView、1) 同じメソッドを呼び出しており、2) ajax/非 ajax 呼び出しの両方から同じパラメーターを渡すため、内部にユーザー オブジェクトを含むモデルが必要です。

于 2013-07-23T14:57:31.300 に答える