1

回答に飛び込む前に、私のシナリオを理解していることを確認してください。

  1. CREATE が点滅する ajax 呼び出しがあります。
  2. フラッシュを JSON としてフェッチする他の ajax 呼び出しがあります。

現在起こっていること: フラッシュを作成するボタンをクリックします。その後、実行する ajax 呼び出しを実行します。

public function actionGetAllFlashesAsJSON() {
   $flashMessages = Yii::app()->user->getFlashes(true);
   $returnResult = array();
   foreach ($flashMessages as $key => $value) {
     $newItem = array();
     $newItem['message']  = $value;
     $newItem['kind']     = $key;
     $returnResult[]= $newItem;  
   }
   print json_encode($returnResult);
   die();
}

私の問題は、この関数を 2 回続けて実行しても、フラッシュが返され続けることです。ただし、サイトを更新するとエラーが表示され、もう一度更新を押すと消えてしまいます。私の理論では、ページの更新により、他の種類のメッセージの削除が引き起こされているということです...しかし、何ですか? また、上記のコードでメッセージを受信した後、これらのメッセージを強制的に削除するにはどうすればよいですか?

詳細な背景情報: フラッシュをエラー メッセージとして使用していますが、サイトの上部に表示されるようにしたいと考えています。フラッシュは Ajax 経由で作成される可能性があるため、新しいメッセージをチェックして表示するために JavaScript を実行していますが、getFlashes を呼び出した後にメッセージが削除されないため、メッセージが何度も表示されるという問題がありますか?

4

1 に答える 1

0

フラッシュ メッセージは、SESSION変数によって制御されます。この変数は、ページがロードされるときに Yii によって破棄されます (おそらく、フレームワークのかなり深い場所で)。ajax リクエストの開始時に、以前のすべてのフラッシュ メッセージを手動で破棄する必要があります。

getFlashes()を使用して、既存のすべてのフラッシュ メッセージを取得できます。

他のフラッシュ メッセージ メソッドについては、こちらの CWebUser ドキュメントを参照してください。

于 2012-12-05T09:00:11.730 に答える