Отправить объект из php (view) в контроллер (php) через ajax

Добрый день.
У меня есть страница, где в объявлениях отображаются.
Каждую минуту я хотел бы проверить, есть ли какие-либо изменения в объявлении.
если есть какие-либо изменения, я должен обновить содержимое страницы.
Поэтому мне нужно отправить старые объявления на контроллер для проверки.
Но моя проблема в том, что я не могу отправить весь объект из базы данных обратно в контроллер.
(Я могу отправить только один простой тип данных, например string, int и т. Д.)

ниже приведен обзор моего кода
Заранее спасибо.

мой взгляд (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

Решение

Ваше мнение (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);

Действие контроллера

Изменить рендер для рендеринга 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 "";
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector