2017-11-02 32 views
0

おはよう。
私は、お知らせが表示されるページを持っています。
毎分、アナウンスに変更があるかどうかチェックしたいと思います。
変更がある場合は、ページの内容を更新する必要があります。
したがって、古いアナウンスをチェックのためにコントローラに返送する必要があります。
しかし、私の問題は、データベースからコントローラ全体にオブジェクト全体を送る方法ではないということです。
(私はint型など、文字列のようなだけでプレーンな単一のデータ・タイプを送ることができます)、以下のphp(view)からajax経由でコントローラ(php)にオブジェクトを送信


は私のコード
の概要を事前にありがとうございます。

私のビュー(PHP)

<div class="row " id="tabapp_news"> 
    <div class="container"> 
     <div class='tickercontainer'> 
      <div class='mask'> 
       <ul id="telop"> 
       <?php 
       foreach ($announces as $announce) { 
        echo '<li>' . $announce->comment . '</li>'; 
       } 
       ?> 
       </ul> 
      </div> 
     </div> 
    </div> 
</div> 

コントローラ

public function actionIndex() 
{ 
    $announces = []; 
    $desk_id = Yii::$app->request->get(DESK_KEYWORD); 
    if (!empty($desk_id)) { 
     $desk = Desk::find() 
        ->where((['id' => $desk_id])) 
        ->one(); 
     if ($desk) { 
      $announces = Announce::getOpeningAnnouncesByDesk($desk->id); 
     } 
    } 
    return $this->render('announce', [ 
      'announces' => $announces, 
      'desk' => $desk, 
      ]); 
} 


public function actionCheckNewAnnounce() 
{ 
    $announces = Yii::$app->request->post('announces');; 
    $desk_id = Yii::$app->request->get(DESK_KEYWORD); 
    if (!empty($desk_id)) { 
     $desk = Desk::find() 
        ->where((['id' => $desk_id])) 
        ->one(); 
     if ($desk) { 
      $new_announces = Announce::getOpeningAnnouncesByDesk($desk->id); 

      if (array_diff($new_announces, $announces)) { 
       return $this->render('announces', [ 
        'announces' => $new_announces, 
        'desk' => $desk, 
       ]); 
      } 
     } 
    } 
    return ""; 
} 

私のJavaScript/AJAX

var interval = setInterval(function(){ 
     $.ajax({ 
      url: '/check-new-single', 
      dataType: 'html', 
      data: {announces: $("#info").data('announces')}, 
      method: 'post', 
      success: function(response) { 
       if (response != "") { 
        $('#telop').empty(); 
        $('#telop').append(response); 
       } 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 
       console.log("ajax communication failure."); 
      } 
     }); 
    }, 60000); 
+0

をレンダリングするためにレンダリングし、uが唯一の新しいアナウンスを表示したり、古いものと新しいを追加したいですか? –

+0

こんにちは、私はちょうど新しいものを表示する必要があります。 – chipnot

+0

これは '$ new_announces = Announce :: getOpeningAnnouncesByDesk($ desk-> id);'新しいアナウンスを出しますか? –

答えて

0

ビュー(index.phpを)

<div class="row " id="tabapp_news"> 
<div class="container"> 
    <div class='tickercontainer'> 
     <div class='mask'> 
      <ul id="telop"> 
      <?php 
      echo $this->render('annnounce',['announces' => $announces]) 
      ?> 
      </ul> 
     </div> 
    </div> 

ビュー(announce.php)

<?php 
    foreach ($announces as $announce) { 
       echo '<li>' . $announce->comment . '</li>'; 
    } 
?> 

JS

var interval = setInterval(function(){ 
    $.ajax({ 
     url: '/check-new-announce', 
     dataType: 'html', 
     data: {announces: $("#info").data('announces')}, 
     method: 'post', 
     success: function(response) { 
      if (response != "") { 
       $('#telop').html(response); 
      } 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      console.log("ajax communication failure."); 
     } 
    }); 
}, 60000); 

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

変更は、1分後のAjax

public function actionCheckNewAnnounce() 
{ 
    $announces = Yii::$app->request->post('announces');; 
    $desk_id = Yii::$app->request->get(DESK_KEYWORD); 
    if (!empty($desk_id)) { 
     $desk = Desk::find() 
       ->where((['id' => $desk_id])) 
       ->one(); 
     if ($desk) { 
      $new_announces = Announce::getOpeningAnnouncesByDesk($desk->id); 

      if (array_diff($new_announces, $announces)) { 
       return $this->renderAjax('announce', [ 
        'announces' => $new_announces, 
       ]); 
      } 
     } 
    } 
    return ""; 
} 
関連する問題