【问题标题】:Yesod and REST AjaxYesod 和 REST Ajax
【发布时间】:2013-09-18 12:44:45
【问题描述】:

我正在使用 Yesod 构建一个 Ajax 应用程序(使用 jQuery,尽管我认为这对我的问题来说并不重要)。基本上,我希望服务器根据是否发送 XMLHttpRequest 标头来发送相同数据的不同表示。 (所有这些的重点是使用像history.js这样的javascript库

特别是,我希望有这样的路线:

/图片/#PictureId GET

在没有 XHR 标头的情况下访问时,会通过转到默认布局来处理 - 或者更好的是,通过最终将被默认布局包装的小部件进行处理,当被 XHR 请求访问时,只需发送一个小部件的 HTML 表示形式。

我应该如何处理这个问题?我想我可以制作一个自定义的类似 defaultLayout 的函数来将小部件包装在逻辑中。这是明智的,还是有更好的方法?

编辑:我决定将 Yesod 类中的 defaultLayout 方法重写为:

defaultLayout widget = do
    req <- waiRequest
    let reqwith = lookup "X-Requested-With" $ requestHeaders req
    when (maybe False (== "XMLHttpRequest") reqwith) $ do
      (PageContent _ _ w) <- widgetToPageContent widget

      giveUrlRenderer $ [hamlet| ^{w} |]
    ...

但是现在我遇到了一个我不太明白的类型错误

Couldn't match type `blaze-markup-0.5.1.5:Text.Blaze.Internal.MarkupM ()'
              with `()'
Expected type: HandlerT App IO ()
  Actual type: HandlerT
                 App IO (blaze-markup-0.5.1.5:Text.Blaze.Internal.MarkupM ())

【问题讨论】:

    标签: ajax yesod history.js


    【解决方案1】:

    你应该看看这一章:http://www.yesodweb.com/book/restful-content

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2016-04-18
      • 2014-06-04
      • 2019-11-30
      • 2016-01-04
      相关资源
      最近更新 更多