2016-09-13 5 views
0

Я использую плагин Datatables, чтобы получить данные таблицы с сервера с использованием свойства ajax и преобразовать его с использованием свойства dataSrc. Мой DataTables определение:datatables dataSrc функция не вызвана для успешного ответа ajax

var my_table = $('#my_table').dataTable({ 
    "processing": true, 
    "serverSide": true, 
    "ajax": { 
     "url": "/my/url", 
     "type": "POST", 
     "dataSrc": function(json) { 
      console.log('json', json); 
      return format_my_table_data(json.data); 
     } 
    }, 
    "deferLoading": found_rows, 
    "data": initial_my_table_data, 
    "ordering": true, 
    "order": [[1, "desc"]], 
    "lengthMenu": [ 
     [25, 50, 100], 
     [25, 50, 100] 
    ], 
    "columns": my_table_columns 
}); 

Начальная нагрузка работает отлично, и заказ колонок и поисковых работ иногда но в основном я вижу возвращение Ajax вызова успешно с действительным JSON (я проверил с помощью jsonlint.com) и таблица застревает в «Обработка ...» иногда или таблица просто не меняется вообще.

Json с сервера: {"recordsTotal":379,"recordsFiltered":378,"draw":25,"data":[{...}]}

При проверке сети в консоли я могу увидеть запрос Ajax посылает и ответ, который похож каждый раз (с общим временем между 600 мсом и 1600ms в зависимости от количество возвращаемых строк), но моя консоль.log внутри функции dataSrc не вызывается и ошибок в javascript в консоли. Что дает?

+0

Вы возвращаете тот же параметр 'draw', который был получен по запросу на сервере? Плагин может отменить ответ, если значения 'draw' в запросе и ответе не совпадают. –

+0

@ Gyrocode.com, что относительно случая, когда количество возвращенных результатов меньше значения рисования, скажем, вы только смогли найти 3 строки, если значение рисования равно 3? Или, может быть, я неверно истолковываю, что такое «рисовать». –

ответ

1

Ваш сценарий должен возвращать параметр draw с тем же значением параметра draw в запросе. Я считаю, что он начинается с 1, а затем увеличивается с каждым запросом.

Из manual:

draw

Жеребьевка счетчик, что этот объект является ответом на - от параметра draw передается как часть запроса данных. Обратите внимание, что это настоятельно рекомендуется по соображениям безопасности указать, что вы передаете этот параметр целому числу, а не просто отсылаете обратно клиенту то, что оно отправило в параметре draw, чтобы предотвратить атаки на сценарии Cross Site Scripting (XSS).

+0

Спасибо, я неправильно читаю атрибут draw как количество возвращенных строк, а не число рисунков таблицы. Я изменил значение возвращаемой дро, чтобы просто быть тем, что передавалось, и теперь это работает. –