Я занимаюсь разработкой чата в 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,
]);
}
}