timofeydeys
@timofeydeys
Свобода творцов

Откуда второй запрос при обновлении datatables?

Добрый вечер! Суть ворпоса в заголовке. В двух словах. Я загружаю страницу и он загружает данные ajax-ом в таблицу. ПОсле я выбираю какие то фильтры делаю ajax на сервер, он там фильтрует и отдает обратно словарь. Тут все работает супер. Но как только я пробую переписать таблицу новыми данными, то сразу же делается еще запрос только как при загрузке страницы, который возвращает все данные, и таблица уже новым запросом перезаписывается. В общем, как его убрать??? Или как еше сделать фильтрацию??? Помогите пожалуйста, все доки и весь гугл уже сломал

html:
<table id="tableBid" class="table table-striped table-bordered" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                            <!--<th>Аватар</th>-->
                            <th>Дата заявки</th>
                            <th>Страница отправки сообщения</th>
                            <th>Следующий шаг</th>
                            <th>Дата шага</th>
                            <th>Комментарий все</th>
                            <th>Имя</th>
                            <th>Телефон</th>
                            <th>е-meil</th>
                        </tr>
                    </thead>
                </table>

JS
var oTable = $('#tableBid').dataTable({
        "processing": true, //При подгрузке страницы показывать таблицу или нет
        "serverSide": true, // фильтрация на стороне сервера
        "oLanguage": {
             "sProcessing":   "Подождите...",
             "sLengthMenu":   "_MENU_ записей на странице",
             "sZeroRecords":  "Записи отсутствуют.",
             "sInfo":         "Записи с _START_ до _END_ из _TOTAL_ записей",
             "sInfoEmpty":    "Записи с 0 до 0 из 0 записей",
             "sInfoFiltered": "(отфильтровано из _MAX_ записей)",
             "sInfoPostFix":  "",
             "sSearch":       "Поиск: ",
             "sUrl":          "",
             "oPaginate": {
             "sFirst": "Первая",
             "sPrevious": "Предыдущая",
             "sNext": "Следующая",
             "sLast": "Последняя"
             },
        },
        "aoColumnDefs" : [{
                                 "aTargets": [0],
                                 "mRender": function(dataBid, type, full){
                                    return dataBid.replace("T", " ").replace("Z", "");
                                 }
                            },{
                                 "aTargets": [2],
                                 "mRender": function(status, type, full){
                                    var str = '';
                                    if (status == 1)
                                        str = '<button name="1" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-info" id="bid-' + full[8] + '">Перезвонить</button>';
                                    else if (status == 2)
                                        str = '<button name="2" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-info" id="bid-' + full[8] + '">Отправить предложение</button>';
                                    else if (status == 3)
                                        str = '<button name="3" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-primary" id="bid-' + full[8] + '">Ожидаем ответа</button>';
                                    else if (status == 4)
                                        str = '<button name="4" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-danger" id="bid-' + full[8] + '">Отказ</button>';
                                    else if (status == 5)
                                        str = '<button name="5" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-warning" id="bid-' + full[8] + '">Ожидаем оплату</button>';
                                    else if (status == 6)
                                        str = '<button name="6" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-danger" id="bid-' + full[8] + '">Неккоректная заявка</button>';
                                    else if (status == 7)
                                        str = '<button name="7" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-info" id="bid-' + full[8] + '">Дублирующая заявка</button>';
                                    else if (status == 8)
                                        str = '<button name="8" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-danger" id="bid-' + full[8] + '">Удалено</button>';
                                    else if (status == 9)
                                        str = '<button name="9" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-primary" id="bid-' + full[8] + '">Дубл. захват</button>';
                                    else if (status == 10)
                                        str = '<button name="10" onclick="openPanel(' + full[8] + ', this);" style="width:190px" class="btn btn-success" id="bid-' + full[8] + '">Сделка завершена</button>';
                                    return str;
                                 }
                            },{
                                 "aTargets": [3],
                                 "mRender": function(dateStatus, type, full){
                                    return dateStatus.replace("T", " ").replace("Z", "");
                                 }
                            }
        ],
        "ajax": "{% url 'bid.all.json' %}"


urls:
url(r'^table/json$', views.BidListView.as_view(), name='bid.all.json'),
url(r'^filtrbid/$', views.BidListView.filter_queryset, name='bid.filtr.json'),


views:
class BidListView(BaseDatatableView):
    model = bid
    columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email', 'id']
    order_columns = ['dataBid', 'site.url', 'status', 'dateStatus', 'comment', 'name', 'number', 'email']
    max_display_length = 250

    def filter_queryset(self, qs):
        if self.request.method == "POST":
            search = self.request.POST['sitesFiltr']
            if search:
                qs = qs.filter(status=int(search))
                return qs
            else:
                return qs
        return qs


ВОТ САМОЕ ГЛАВНОЕ, ВОТ ТАК ОТПРАВЛЯЮ ЗАПРОС НА ФИЛЬТРАЦИЮ И ОБНОВЛЯЮ ТАБЛИЦУ:
$.ajax({
            url: "{% url 'bid.all.json' %}",
            type: 'POST',
            data: {
                //sitesFiltr: filtrFFF,
            },
            dataType:"json",
            error: function(data) {
                    oTable.fnClearTable();
                    oTable.fnAddData(data.data);

            },
            // При успехе меняем информацию в шаблоне
                success: function(data){
                    oTable.fnClearTable();
                    oTable.fnAddData(data.data);
                },
            // CSRF механизм защиты Django
                beforeSend: function(xhr, settings) {
                    console.log('-------------before send--');
                    function getCookie(name) {
                        var cookieValue = null;
                        if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                var cookie = jQuery.trim(cookies[i]);
                                // Does this cookie string begin with the name we want?
                            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                break;
                            }
                        }
                    }
                    return cookieValue;
                    }
                    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                        // Only send the token to relative URLs i.e. locally.
                        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                    }
                }
            });// ajax
  • Вопрос задан
  • 348 просмотров
Пригласить эксперта
Ответы на вопрос 1
@tusklozeleniy
Front-end разработчик
Сложно понять код. Но, как я понимаю, в запросе ты можешь отправлять "bid.all.json", либо "bid.filter.json". И очень странно, что в запросе на фильтрацию отправляется "bid.all.json"
Ответ написан
Ваш ответ на вопрос

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

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