【问题标题】:How to show flash.message in Grails after AJAX callAJAX 调用后如何在 Grails 中显示 flash.message
【发布时间】:2013-07-29 09:25:09
【问题描述】:

我想在 AJAX 调用完成后显示一些 Flash 消息。我就是这样的..

控制器动作 --

def subscribe()
{
    def subscribe = new Subscriber()
    subscribe.email = params.subscribe
    if (subscribe.save())
    {
        flash.message = "Thanks for your subscribtion"
    }

}

查看部分--

Subscribe :
    <g:formRemote onSuccess="document.getElementById('subscribeField').value='';" url="[controller: 'TekEvent', action: 'subscribe']" update="confirm" name="updateForm">
       <g:textField name="subscribe" placeholder="Enter your Email" id="subscribeField" />
       <g:submitButton name="Submit" />
    </g:formRemote >
    <div id="confirm">
       <g:if test="${flash.message}">
           <div class="message" style="display: block">${flash.message}</div>
       </g:if>
    </div>

我的 AJAX 工作正常,但没有显示 flash.message。刷新页面后显示消息。如何解决?

【问题讨论】:

  • 简答 - flash 不适用于 ajax。

标签: ajax grails grails-2.0


【解决方案1】:

当您使用 ajax 时,您的页面内容不会被重新解析,因此您的代码:

<g:if test="${flash.message}">
  <div class="message" style="display: block">${flash.message}</div>
</g:if>

不会再次运行。

所以我同意@James 的评论,flash 对你来说不是更好的选择。

如果您需要更新视图,请使用 JSON。 Grails 已经有一个converter 可以用于此:

if (subscribe.save()) {
  render ([message: "Thanks for your subscribtion"] as JSON)
}

你的看法:

<g:formRemote onSuccess="update(data)" url="[controller: 'TekEvent', action: 'subscribe']"  name="updateForm">
  <g:textField name="subscribe" placeholder="Enter your Email" id="subscribeField" />
  <g:submitButton name="Submit" />
</g:formRemote >

<script type='text/javascript'>
  function update(data) {
    $('#subscribeField').val('');
    $('#confirm').html(data.message);
  }
</script>

【讨论】:

    【解决方案2】:

    你有几个选择, 首先,您可以尝试以 json 或 map 的形式从控制器返回消息,然后使用 javascript 库将其呈现在您自己的屏幕上,如果您想使用 Grails ajax 标签,这有点不同。

    另一种选择是使用像 one-time-data 这样的插件,

    总结 一个安全的替代“flash”作用域,你在其中存储数据 会话只能读取一次,但在 如果您具有所需的“id”,则会话的未来。

    说明 这个插件提供了一个多窗口安全的闪存范围替代方案 这使得可以推迟访问数据,直到任何未来 请求(只要会话被保留)。 more

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多