【问题标题】:POST request with no page refreshing in YesodYesod中没有页面刷新的POST请求
【发布时间】:2018-01-08 05:04:32
【问题描述】:

任务是创建一个具有漂亮错误处理功能的注册表单。
我是 Yesod 的新手,所以我发现这样做的唯一方法是:

regForm :: Form User

getRegRExtra extraFormWidget = do
  (formWidget, enctype) <- case extraFormWidget of
                             Nothing -> generateFormPost regForm
                             Just val -> return val
  defaultLayout $ $(widgetFile "reg/reg")

getRegR = getRegRExtra Nothing

postRegR = do
  ((result, widget), enctype) <- runFormPostNoToken regForm 
  case result of
    FormSuccess person -> undefined
    _ -> getRegRExtra (Just (widget, enctype))

但是有一个问题:每次提交时页面都会刷新,而我希望它动态地执行此操作。
我知道它可以在 Ajax 或 Jquery 的帮助下修复,
但我会失去使用 Yesod POST 功能时获得的所有好处。
有什么标准的方法来处理吗?

【问题讨论】:

    标签: ajax post yesod page-refresh yesod-forms


    【解决方案1】:

    解决办法是:

    -- Used for returning plain html as AJAX response.
    noLayout :: Widget -> Handler Html
    noLayout widget = do
      pc <- widgetToPageContent widget
      withUrlRenderer [hamlet| ^{pageBody pc} |]
    
    -- Replace a default event handler with the AJAX one.
    getRegR :: Handler Html
    getRegR = do
      ((res, formWidget), enctype) <- runFormPost regForm
      defaultLayout $ do
        $(widgetFile "reg/reg")
        addScriptRemote "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"
        toWidget [julius|
          $(document).on('click', '.btn-important', function(e) {
            e.preventDefault();
            e.stopPropagation();
            $.ajax({
              type: 'POST',
              url:'@{RegR}',
              cache: false,
              dataType: 'html',
              data:$('#form-reg').serialize(),
              success: function(data) { $('#form-reg').html(data); }
            });
          }); |]
    
    postRegR :: Handler Html
    postRegR = do
      ((result, widget), enctype) <- runFormPostNoToken regForm
      noLayout widget
    

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 2019-02-06
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多