Задать вопрос
@MrKMV34
Превозмогая трудности

Почему файл js загружается дважды?

Здравствуйте!

На codeigniter'e сайтик, в нём таблица строки которой разбиты паганацией. Так же есть сортировка строк, которая работает через ajax (уходит запрос, ответ переписывает таблицу и кнопки пагинации). Переход по страницам тоже на ajax'e, весит обработчик нажатия на кнопку пагинации.
При первом клике от посылает запрос и при ответе перезаписывает таблицу, а так же зачем-то подгружает скрипт js, который обрабатывает весь ajax. В консоли браузера это выглядит так:
6589690cfe5b4814b963e5130f878b42.PNG
При втором клике:
aaf9b009fd9647f8ab57e34bd7318e69.PNG
обработчик срабатывает дважды и так в геометрической прогрессии.
Вот скрипт, который посылает ajax:
"use strict";

var SortGroup = {
    onReady: function () {

        $('.btn-sort').on("click", function () {
            SortGroup.updTable(this);
        });

        $(document).on("click", ".ajax a", function (event) {
            event.preventDefault();
            SortGroup.nextPage(this);
            // alert(this);
        });
    },

    updTable: function (btn) {
        var arr_fld = {'Username': 'username', 'E-mail': 'e_mail', 'Date': 'created_date'};
        var arr_tp = {'/\\': 'DESC', '\\/': 'ASC'};
        var fld = $(btn).text().split(' ')[0];
        var tp = $(btn).text().split(' ')[1];
        var url = "http://guestbook.local/index.php/homepage/ajax_table";
        var data = {
            field: arr_fld[fld],
            type: arr_tp[tp]
        };
        var jqxht = $.post(url, data, function (data) {
            $('.entries-block').html(data);
            $(btn).text(fld + " " + tp.split("").reverse().join(""));
        });
        jqxht.fail(function () {
            alert('Reload page and try again');
        });
    },

    nextPage: function (ref) {
        var url = ref;
        var jqxht = $.post(url, {}, function (data) {
            $('.entries-block').html(data);
        });
        jqxht.fail(function () {
            alert('Reload page and try again');
        });
    }
};

$(document).ready(SortGroup.onReady());


Как решить проблему с увеличивающимся количеством запросов?

UPD: посмотрел плагином VisualEvent, после загрузки страницы таблицы с помощью кнопок пагинации, на кнопки навешивается ещё по одному событию загрузки, даже если отписаться от этих событий с помощью .off();

UPD2:
Первоначальная загрузка
5d212128f816457491acbcccf4110efe.PNG
Обновление через ajax, который SortGroup.nextPage(this);
433061ce293745bca4c33266ff9f326f.PNG
  • Вопрос задан
  • 531 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@DragorWW
Front-end Developer
хорошим тоном является отписка (.off) от событий пере подпиской (.on) на них, что бы таких проблем не было.
$('.btn-sort')
            .off('click.updateTable')
            .on('click.updateTable', fn ());
Ответ написан
@MrKMV34 Автор вопроса
Превозмогая трудности
Проблемы была найдена
1) в контроллере, который в не зависимости от типа запроса отдавал все статические файлы.
2) не было отписки от делегированных событий, см ответ Сергей Андреев
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lasmaster
Вся сила в самообразовании
Если работаете под Хромом, установите плагин VisualEvent и посмотрите как навешиваются эвенты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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