2013-07-23 51 views
1

當Grails的控制器使用afterInterceptor我會做這樣的如何在Grails中的Ajax請求上使用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請求的模型偉大的工作,總是[:]。

如何獲取trackPageView中的用戶對象以獲取Ajax請求?

回答

1

要同時支持ajax和非ajax請求,您必須執行一些content negotiation並返回相應的響應。這裏有一個例子,直接從文檔:

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調用
  • 你在同一個PARAMS傳遞(如用戶ID)兩個AJAX /非Ajax調用

相同的URL如果是這兩個,那麼在技術上應該有一個模型與內的用戶對象因爲1)你調用的是同樣的方法,2)從ajax/non-ajax調用中傳遞相同的參數。

+0

這不是我的問題。問題是如何在ajax請求的afterInterceptor中獲取模型? – confile

+0

對預期問題的更新答案 – ikumen

+0

對於您的兩個問題都可以。但它不起作用。 – confile