Как ставить лайки записям в новостной ленте, используя django+ajax+jquery?

Всем привет!
Есть список постов, пытаюсь сделать возможность лайкать понравившуюся запись (только начал вникать в чудесную технологию ajax). Довести до ума никак не могу . Обновляется отображение лайков во всех постах из-за того, что в цикле выводятся посты и у всех одинаковый селектор. Когда делаю селектор вида id="likes_{{post.id}}", получается, что лайк проставляется, но отображается только после обновления страницы.
Наставьте плиз на путь истинный.
Шаблон (кусочек) :
<button id="likes" data-catid="{{post.id}}" class="btn btn-primary" type="button">
        {% bootstrap_icon "heart-empty" %}  <span class="ajax_{{post.id}}">{{post.likes}}</span></button><br><br><br>


JQUERY:
$(document).ready(function (){
    $('.btn').click(function(){
        var catid;
        catid = $(this).attr("data-catid");
        var uniq_id = ".axaj_"+catid;
        $.get('/like_post/', {post_id: catid}, function(data){
            $(uniq_id).html(data);
        });
    });
});
  • Вопрос задан
  • 1201 просмотр
Пригласить эксперта
Ответы на вопрос 2
@DennyD314 Автор вопроса
Форумчане с джангобука помогли:
djbook.ru/forum/topic/5132/#post-32811

js:
function getAjax(divdett,pageload) {
    $(function(){$(divdett).load(pageload).show();});}


html:
{% for post in posts %}
    <button id="likes" data-catid="{{post.id}}" class="btn btn-primary" type="button"
            onclick="getAjax('.ajax_{{post.id}}','/like_post/?post_id={{ post.id }}');">
        {% bootstrap_icon "heart-empty" %}  <span class="ajax_{{post.id}}">{{post.likes}}</span></button><br><br><br>
{% endfor %}


Но я в абсолютном недоумении, я не понимаю, что не так с тем что я написал до этого... в дебаге я ставлю бряку на $(uniq_id).html(data); , вижу значение uniq_id = ".ajax_3" например, но счетчик увеличивается только после перезагрузки страницы. Меняю uniq_id на ".ajax_3" в скрипте - счетчик обновляется динамически...
Ответ написан
Комментировать
clojurerabbit
@clojurerabbit
Добрый день.

Мне кажется, что не стоит использовать GET запрос для изменения состояния. Все же семантически GET идемпотентен. Для всех, даже самых простых операций, ведущих к изменению состояния на сервере, я бы использовал как минимум POST (но тут со мной наверняка многие не согласятся).

Что касается кода, то я уж не знаю, сделали ли вы опечатку в коде, который запускали или же просто при переносе его сюда, но у вас в строке
var uniq_id = ".axaj_"+catid;
опечатка - там все же должен быть .ajax, а не .axaj
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы