【问题标题】:How use afterInterceptor on Ajax Requests in Grails?如何在 Grails 中对 Ajax 请求使用 afterInterceptor?
【发布时间】:2013-07-23 14:14:44
【问题描述】:

在 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 请求获取用户对象?

【问题讨论】:

    标签: grails grails-2.0 grails-controller


    【解决方案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 调用中调用完全相同的 url
    • 您是否为 ajax/非 ajax 调用传递了相同的参数(例如用户 ID)

    如果两者都是,那么从技术上讲,您应该有一个在 trackPageView 内包含用户对象的模型,因为 1)您正在调用相同的方法,并且 2)从两个 ajax/非 ajax 调用中传入相同的参数。

    【讨论】:

    • 这不是我的问题。问题是如何在 ajax 请求的 afterInterceptor 中获取模型?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多