Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
14 / 8 / 7
Регистрация: 09.01.2018
Сообщений: 151
1

Баг обновления контента на странице

08.12.2020, 05:46. Показов 507. Ответов 0

Author24 — интернет-сервис помощи студентам
Всем привет.
Есть у меня js клас который при клике на фильтры обновляет контент на странице.
В контенте на странице тоже есть кнопки по типу добавить в корзину.
Так вот при нажатие на такую кнопку уходит ajax POST запрос и вторым действием проходит подгрузка контента в badge иконки корзины.
вот так выглядет код :
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    window.addProduct = e => {
        let target = e.currentTarget;
        if (target.classList.contains('js-add-product')) {
            target.classList.remove('js-add-product');
            target.classList.add('active', 'js-cart');
            $.ajax({
                url: target.getAttribute('data-url'),
                method: 'POST'
            }).done(setTimeout( function(){
                $( "#cart" ).load(location.href + " #cart span" );
            }, 200));
        } else {
            window.location.href = "/cart";
        }
    };
тут то и проблема. Подробнее ниже сначала скину класс фильтр и кусок контролера обрабатывающий запрос.
Кусок контролера:
PHP
1
2
3
4
5
6
7
8
//        if ($request->get('ajax')) {
        if ($request->isXmlHttpRequest()) {
            return new JsonResponse([
                'content' => $this->renderView('catalog/filters/_products.html.twig', ['product_pager' => $pager, 'asd' => $countFilter]),
                'sorting' => $this->renderView( 'catalog/filters/_head_sort.html.twig', ['sort' => $sort]),
                'pagination' => $this->renderView( 'catalog/filters/_pagination.html.twig', ['product_pager' => $pager])
            ]);
        }
Класс фильтра:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
 * @property {HTMLElement} pagination
 * @property {HTMLElement} content
 * @property {HTMLElement} sorting
 * @property {HTMLFormElement} form
 */
export default class Filter {
 
 
    /**
     * @param {HTMLElement|null} element
     */
    constructor(element) {
        if (element === null){
            return
        }
 
        this.pagination = element.querySelector('.js-filter-pagination');
        this.content = element.querySelector('.js-filter-content');
        this.sorting = element.querySelector('.js-filter-sorting');
        this.form = element.querySelector('.js-filter-form');
        this.bindEvents();
    }
 
    /**
     * Add the behaviors to the different elements
     */
    bindEvents () {
        // const aClickListener = e => {
        //   if (e.target.tagName === 'A') {
        //       e.preventDefault();
        //       this.loadUrl(e.target.getAttribute('href'));
        //   }
        // };
 
        this.sorting.addEventListener('change', e => {
            if (e.target.tagName === 'SELECT'){
                let sort = this.form.querySelector('#' + e.target.getAttribute('id').split('-')[1] );
                sort.value = e.target.value;
                sort.dispatchEvent(new Event('change'));
            }
        });
 
        // this.pagination.addEventListener('click', aClickListener);
 
        this.form.querySelectorAll('input').forEach(input => {
            input.addEventListener('change', this.loadForm.bind(this));
        });
    }
 
    async loadForm () {
        const data = new FormData(this.form);
        const url = new URL(this.form.getAttribute('action') || window.location.href);
        const params =  new URLSearchParams();
        data.forEach((value, key) => {
            params.append(key, value);
        });
 
        return this.loadUrl(url.pathname + '?' + params.toString())
    }
 
    async loadUrl (url) {
        // const ajaxUrl = url + '&ajax=1'; //порождает другой баг с пагинацией
        const response = await fetch(url, {
            headers: {
                'X-Requested-With': 'XMLHttpRequest'
            }
        });
 
        if (response.status >= 200 && response.status < 300) {
            const data = await response.json();
            this.content.innerHTML = data.content;
            this.sorting.innerHTML = data.sorting;
            this.pagination.innerHTML = data.pagination;
            history.replaceState({}, '', url);
        } else {
            console.error(response);
        }
 
    }
 
}
Короче $request->isXmlHttpRequest() перехватывает запрос .load() который в свою очередь GET и возращает мне данные из class Filter.
Я конечно могу обновлять badge в этом классе но не знаю стоит ли это делать и есть ли другой способ?
Просто такого поведения я не ожидал и вот теперь думаю можно ли заменить .load() на другой метод который бы не перехватывался или не стоит так заморачиваться?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2020, 05:46
Ответы с готовыми решениями:

После обновления контента <div> через AJAX перестают работать события данного контента
Здравствуйте. Есть проблемка такого характера. На сайте выбирается студент и в поля ввода читаются...

Частота обновления контента
вообщем если долго не обновлять контект и примерно через сколько если отваляца позиции сайта? С...

гугл уважает обновления контента?
вообщем ситуация такая. есть сайт, месяца два ему. По ВЧ (200.000+) висит в гугле в районе top100....

Каково влияние частоты обновления контента
Уважаемые, вот такой вопрос: влияет ли частота обновления (добавления) контента на сайте на его...

0
08.12.2020, 05:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2020, 05:46
Помогаю со студенческими работами здесь

Частота обновления контента, чтоб не слететь...
Здравствуйте! В одном топике прочитал, что яндекс любит живые сайты, которые обновляются, а...

Обновления контента без перезагрузки страницы
Всем доброго времени суток! Я нащинающий в веб програмировании! Очень много работал с вапом! Но...

Баг: очистка диска приводит к повторной установке обновления
Приветствую. При выполнении стандартной процедуры очистки диска с отметкой &quot;очистка обновлений...

Отображение контента на странице
При редактировании страницы, в визуальном редакторе добавляю несколько ссылок на документы (рис1)....

Размытие контента на странице
Доброго дня! При вёрстке страниц столкнулась со следующим эффектом: С помощью фреймворка Jquery...

Поиск контента на странице
Добрый день ! :) Мне пришло тестовое задание на python backend В задании нужно загружать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru