如何在AJAX调用后在Grails中显示flash.message

Fre*_*ded 2 ajax grails grails-2.0

我希望在完成AJAX调用后显示一些flash消息.我这样做..

控制器动作 -

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

}
Run Code Online (Sandbox Code Playgroud)

查看零件 -

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>
Run Code Online (Sandbox Code Playgroud)

我的AJAX工作正常,但它没有向我显示flash.message.刷新页面后显示消息.怎么解决?

Sér*_*els 7

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

<g:if test="${flash.message}">
  <div class="message" style="display: block">${flash.message}</div>
</g:if>
Run Code Online (Sandbox Code Playgroud)

不会再跑.

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

如果您需要更新视图,请使用JSON.Grails已经有一个可用于此的转换器:

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

你的观点:

<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>
Run Code Online (Sandbox Code Playgroud)