yii: получить новые данные из запроса ajax - PullRequest
0 голосов
/ 11 февраля 2020

Я занимаюсь разработкой чата в yii2 basi c. поэтому я использую ajax .i использовал кнопку и функцию sendmsg для нажатия кнопки. и вставить данные в базу данных, она работает хорошо. Теперь я хочу проверять каждые 3 секунды, если какие-либо новые данные доступны. если доступно, я хочу показать его на странице отправителя и получателя. Также, пожалуйста, помогите мне.

view

<button class="" onclick="sendmsg()">send msg</button>
<?php
$script = <<< JS
function sendmsg(){
        var msg = document.getElementById('messages-text').value;
        var rid = '$rid';

        $.ajax({
         url: '/messages/chat?id='+$rid ,
          type: 'post',
          data: {msg,rid},
          success: function (data) {    
              console.log(data.search);      
          },
      });
      }
JS;
$this->registerJs($script, \yii\web\View::POS_END);
?>

контроллер

public function actionChat($id){

    $this -> actionCreate($id);

    $rid = $id;
    $model = new Messages();
    $searchModel = new MessagesSearch();
    $dataProvider1 = $searchModel->search(Yii::$app->request->queryParams);

    $dataProvider1 = Messages::find()->where(['and',
        ['receiver_id' => [Yii::$app->user->id, $id]],
        ['sender_id' => [Yii::$app->user->id, $id]]
        ])
        //->andWhere(['>', 'created_at', new Expression('DATE_SUB(NOW(), INTERVAL 30 SECOND)')])
        ->all();



    $users = User::find()->where('id != :id ', ['id'=>Yii::$app->user->id])->all();


    if (Yii::$app->request->isAjax) {

        $data = Yii::$app->request->post();
        $msg = $_POST['msg'];
        $reid = $_POST['rid'];
        $seid = Yii::$app->user->id;

        $search =  $msg;


        $model->text = $msg;
        $model->sender_id = $seid;
        $model->receiver_id = $reid;

        if($model->save()){
            return $this->redirect(['view', 'id' => $model->$reid ]);
        }

        \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        return [
            'search' => $search,
            'code' => 100,
            'rid' => $rid,
        ];
      }
      else{
    return $this->render('create', [

        'dataProvider1' => $dataProvider1,
        'rid' => $rid,
        'model'=> $model,
        'users'=> $users,
    ]);

    }  

}
...