@codeme

Как при помощи ajax прочитать данные из БД?

Я возвращаю данные из базы данных (новости + комментарии). Комментарии имеют кнопка "Like". После нажатия на кнопку (AJAX) рейтинг загружается в базу данных. Все работает. Как вернуть количество лайков без перезагрузки страницы для комментария?
  • Вопрос задан
  • 875 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Result007
P|-|P
Я считаю что вешать форму на каждый элемент лайка это жестко.

Предлагаю такое решение:

1) Образно обрисую картину лайка:

<div>
    <i class="иконка сердечка" onClick="addLike({!! $comment->id !!})"></i>
    <span c-id={!! $comment->id !!}>15</span>
</div>


2) JavaScript функция addLike(id):

function addLike(id) {
    $.ajax({
        url: '/comments/like',
        dataType: 'json',
        data: {
                'id': id,
        },
        method: 'POST',
        }).done(function(data) {
            $("span[c-id="' + data.id + '").text( data.likes );
        });
}


3) В контроллере что-то вроде этого:

$comment = Comment::findOrFail($request->id);
    $comment->likes += 1;
    $comment->update();

    return Response::json(['id' => $comment->id, 'likes' => $comment->likes]);


P.S. Извиняюсь сразу за ошибки, хотел донести лишь идею и вероятно можно различные моменты сделать правильнее.
Ответ написан
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
У каждой не pivot/связущей/промежуточной таблицы (хотя и у них бывает) есть обычно уникальный ключ, чаще всего его называют ID. Соответственно, как бы Вы не выводили комментарии, у каждого из них, должен быть какой-то уникальный индентификатор. По этому идентификатору, соотв., отправляете запрос на страницу/контроллер/метод, с ID'шником комментария который нужно обновить (добавить лайк, добавить +1, и т.д.), с помощью всё того же jQuery.post или jQuery.ajax. Данные - массив, примерно такого содержимого:
{
    id: 10, //ID комментария
    action: 'like', //действие
    data: 'Hello world' //доп. данные
}

(*нарисовал очень схематично)

получаете ответ от сервера, при желании можно проверить сам ответ или HTTP-статус и обновляете соответствущий же комментарий на странице, всё по тому же ID.

Всё предельно просто :)

P.S. Таким же образом Вы можете и получить данные о кол-ве лайков (или любом другом параметре) любого комментария или другого объекта. Отправляете запрос, с ID'шником, получаете ответ.
Ответ написан
@khonormgr
Делай небольшое API, которое возвращает ответ в формате json например делайте группу роутов /api/methodname (например news_like).
И в контроллере посылай запрос в бд через модель, делай ретурн в json формате,а в jquery уже разбирай сам json ответ, вот и все.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы