在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请求上,模型总是[:]。
如何在trackPageView中获取Ajax请求的用户对象?
答案 0 :(得分: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
闭包的模型中获取用户对象,您是否可以确认以下内容:
如果两者都是,那么从技术上讲,你应该在trackPageView
内有一个用户对象的模型,因为1)你正在调用相同的方法,2)从ajax / non-ajax传入相同的参数调用