2013-07-29 47 views
1

我想在完成AJAX調用後顯示一些Flash消息。我做這樣的..如何在AJAX調用後在Grails中顯示flash.message

控制器動作 -

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。刷新頁面後顯示消息。如何解決它?

+3

簡短的回答 - 閃光不是AJAX。 –

回答

7

當你使用AJAX你的頁面內容不重新解析,讓您的代碼:

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

不會再次運行。

所以我同意@詹姆斯的評論,閃光不是更好的選擇給你。

如果您需要更新視圖,請使用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> 
3

你有幾個選項, 首先,你可以嘗試從你的控制器以json或地圖的形式返回消息,並使用JavaScript庫在屏幕上顯示它,這有點不同,如果你想使用Grails ajax標籤。

另一種選擇是使用像one-time-data一個插件,它

摘要一個安全的替代品「閃光」的範圍,你在 只能讀一次會議藏匿的數據,但在任何點在 會議的未來,只要你有「身份證」所需。

說明 此插件提供一個多窗口安全的替代閃爍範圍 使得能夠推遲訪問該數據,直到任何未來 請求(只要該會話被保留)。 more

希望它可以幫助