2

AJAX 呼び出しの完了後にいくつかのフラッシュ メッセージを表示したいと考えています。私はこのようにやっています..

コントローラ アクション --

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 が表示されません。ページを更新すると、メッセージが表示されます。それを解決する方法?

4

2 に答える 2

7

ajax を使用すると、ページのコンテンツが再解析されないため、コードは次のようになります。

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

再び実行されません。

だから私は@Jamesのコメントに同意します.flashはあなたにとってより良い選択肢ではありません.

ビューを更新する必要がある場合は、JSON を使用してください。Grails には、これに使用できるコンバーターが既にあります。

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>
于 2013-07-29T15:01:52.120 に答える
3

いくつかのオプションがあります。最初に、コントローラーからのメッセージを json またはマップの形式で返し、JavaScript ライブラリを使用して自分で画面にレンダリングすることができます。これは、Grails ajax タグを使用する場合は少し異なります。

もう 1 つのオプションは、one-time-dataなどのプラグインを使用することです。

まとめ「フラッシュ」スコープの安全な代替手段で、一度しか読み取れないが、必要な「id」があればセッションの将来の任意の時点でデータをセッションに隠します。

説明 このプラグインは、(セッションが保持されている限り) 将来のリクエストまでデータへのアクセスを遅らせることを可能にする、フラッシュ スコープに代わるマルチウィンドウ セーフの代替手段を提供します。 もっと

それが役に立てば幸い

于 2013-07-29T12:57:04.977 に答える