Ajax нумерация страниц не работает правильно в django - PullRequest
0 голосов
/ 08 февраля 2020

Отдельно оба ajax работают как положено, но при совместном использовании возникает проблема:

Проблема - 1: После загрузки новых статей они дублируются
Проблема - 2: Кнопка добавления в избранное перестает работать с вновь загруженными статьями.

AjaxPagination. js:

function ajaxPagination()
{
    $('#pagination a.page-link').each((index, el) =>{
        $(el).click((e) => {
            e.preventDefault()
            let page_url = $(el).attr('href')
            console.log(page_url)

            $.ajax({
                url: page_url,
                type: 'GET',
                success: (data) => {

                    $('.do_it').append( $(data).filter('.do_it').html())

                    $('.pagination').empty()

                    $('.pagination').append( $(data).find('.pagination').html())
                }
            })
        })
    })
}

$(document).ready(function() {
    ajaxPagination()
})

$(document).ajaxStop(function() {
    ajaxPagination()
})

AjaxAddToFlected. js:

const add_to_favorites_url = '/favorites/add/';
const remove_from_favorites_url = '/favorites/remove/';
const favorites_api_url = '/favorites/api/';
const added_to_favorites_class = 'added';


function add_to_favorites(){
    $('.do_it').on('click', '.add-to-favorites', (e) => {
            e.preventDefault()

            const type = $(el).data('type');
            const id = $(el).data('id');

            if( $(e.target).hasClass(added_to_favorites_class) ) {

                $.ajax({
                    url: remove_from_favorites_url,
                    type: 'POST',
                    dataType: 'json',
                    data: {
                        type: type,
                        id: id,
                    },
                    success: (data) => {
                        $(el).removeClass(added_to_favorites_class)
                    }
                })
            } else {

                $.ajax({
                    url: add_to_favorites_url,
                    type: 'POST',
                    dataType: 'json',
                    data:{
                        type: type,
                        id: id,
                    },
                    success: (data) => {
                        $(el).addClass(added_to_favorites_class)
                        // get_session_favorites_statistics()
                    }
                })
            };
        })
};


function get_session_favorites() {
    // get_session_favorites_statistics()

    $.getJSON(favorites_api_url, (json) => {
        if (json !== null) {
            for (let i = 0; i < json.length; i++) {
                $('.add-to-favorites').each((index, el) => {
                    const type = $(el).data('type')
                    const id = $(el).data('id')

                    if ( json[i].type == type && json[i].id == id ){
                        $(el).addClass(added_to_favorites_class)
                    }
                })
            }
        }
    })
}

$(document).ready(function() {
    add_to_favorites()
    get_session_favorites()
})

Django (нумерация страниц) views.py:

def index(request):

    posts = Post.objects.all()

    paginator = Paginator(posts, 3)
    page_number = request.GET.get('page', 1)
    page = paginator.get_page(page_number)

    is_paginated = page.has_other_pages()

    if page.has_next():
        next_url = '?page={}'.format(page.next_page_number())
    else:
        next_url = ''

    context = {
        'page_object': page,
        'is_paginated': is_paginated,
        'next_url': next_url
    }
    return render(request, 'polls/index.html', context=context)

Нет ошибок в консоли отладки браузера. Что здесь не так? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...