2013-08-29 4 views
1

Я только что начал использовать datatables 1.9 jquery plugin, но смотрел, чтобы получить конфигурацию datatables со стороны сервера. мой DataTables код:

$.ajax({ 
     type: "POST", 
     url: "./viewController", 
     data:{ "TableName" : "ViewGridDept", 
     "Call" : "gridConfiguration"}, 
     dataType:"json", 
     success: function(data){ 
     //columns=data.aoColumns; 
     var coldata = eval('('+data+')'); 
     alert(coldata.aoColumns); 
     employeeTable = $("#EmployeeTable").dataTable({ 
     "bJQueryUI" : true, 
     "sPaginationType" : "full_numbers", 
     "bFilter": true, 
     "bInfo": true, 
     "bServerSide": true, 
     "sAjaxSource" : "./viewController", 
     "aoColumns":coldata.aoColumns , 
     "aoColumnDefs":coldata.aoColumnsRef, 
     "fnServerData": function (sSource, aoData, fnCallback) { 
      aoData.push({ "name" : "TableName", "value" : "ViewGridDept" }, 
      { "name" : "Call", "value" : "Data" }); 
      $.ajax({ 
        "dataType": 'json', 
        "type": "POST", 
        "url": sSource, 
        "data": aoData, 
        "success": fnCallback 
        });} 

и моя JSON со стороны сервера является

{"aoColumns":[{"mDataProp":"deptName","sTitle":"Department Name"},{"mDataProp":"deptId","sTitle":"Department Id"}],"aoColumnsRef":[{"aTarget":["2"]},{"aTarget":["1"]}]} 

но мои DataTables не загружая вопрос data.my как использовать вложенную JSON для DataTable "aoColumns":coldata.aoColumns , "aoColumnDefs":coldata.aoColumnsRef,

ответ

1

строка sColumns Устаревшее факультативный является основной причиной того issue.now я использую oaColumnDefs для этого мой рабочий код:

$(document).ready(function() { 
var columns; 
$.ajax({ 
     type: "POST", 
     url: "./viewController", 
     data:{ "TableName" : "ViewGridDept", 
     "Call" : "gridConfiguration"}, 
     dataType:"json", 
     success: function(coldata){ 
     //columns=data.aoColumns; 
     //var coldata = eval('('+data+')'); 
     alert(coldata.aoColumnsRef); 
     employeeTable = $("#EmployeeTable").dataTable({ 
     "bJQueryUI" : true, 
     "sPaginationType" : "full_numbers", 
     "bFilter": true, 
     "bInfo": true, 
     "bServerSide": true, 
     "sAjaxSource" : "./viewController", 
     //"aoColumns":coldata.aoColumns , 
     "aoColumnDefs":coldata.aoColumnsRef, 
     //"aoColumnDefs":[{"sTitle":"Department Name","mDataProp":"deptName","aTargets":"[1]"},{"sTitle":"Department ID","mDataProp":"deptId","aTargets":"[0]"}], 
     "fnServerData": function (sSource, aoData, fnCallback) { 
      aoData.push({ "name" : "TableName", "value" : "ViewGridDept" }, 
      { "name" : "Call", "value" : "Data" }); 
      $.ajax({ 
        "dataType": 'json', 
        "type": "POST", 
        "url": sSource, 
        "data": aoData, 
        "success": fnCallback 
        });} 

}); 
     } 

});

и JSON для первого запроса теперь:

{"aoColumnsRef":[{"aTargets":[1],"mDataProp":"deptName","sTitle":"Department Name","bVisible":true,"bSearchable":true},{"aTargets":[0],"mDataProp":"deptId","sTitle":"Department Id","bVisible":true,"bSearchable":false}]} 

надеюсь, что это помогает тем, как справиться с этой проблемой.

+0

Почему вы используете 'POST'? – andi

2

Ваш ответ с сервера не так хорошо сформирован, как ожидают ваши данные.

Ответить с сервера

В ответ на каждый запрос о предоставлении информации, что делает DataTables к серверу, он ожидает получить хорошо сформированный объект JSON со следующими параметрами.

INT iTotalRecords Всего записей, до фильтрации (т.е. общее количество записей в базе данных)

INT iTotalDisplayRecords Всего записей, после фильтрации (т.е. общее количество записей после фильтрации была применена - не только номер записей, возвращаемых в этом результирующем наборе)

string sEcho Неизменная копия sEcho, отправленная с клиентской стороны. Этот параметр будет изменяться с каждой ничьей (в основном это счетчик обращений), поэтому важно, чтобы это было реализовано. Обратите внимание, что по соображениям безопасности настоятельно рекомендуется, чтобы вы «добавили» этот параметр в целое число, чтобы предотвратить атаки с помощью Cross Site Scripting (XSS).

string sColumns Устаревший Необязательный - это строка с именами столбцов, разделенных запятой (используется в сочетании с sName), что позволит DataTables переупорядочивать данные на стороне клиента, если это необходимо для отображения. Обратите внимание, что число возвращаемых имен столбцов должно точно соответствовать количеству столбцов в таблице. Для более гибкого формата JSON, пожалуйста, используйте mData.

массив aaData Данные в 2D-массиве. Обратите внимание, что вы можете изменить имя этого параметра с помощью sAjaxDataProp.

Вы можете найти эту информацию здесь http://www.datatables.net/usage/server-side

+0

Вы правы, но у меня есть два запроса ajax. Первый запрос для получения конфигурации столбцов и второго запроса ajax для получения данных для отображения в таблице. –

+0

i figurout моя проблема была «aoColumns».теперь я поставил aTargets, mDataProp, sTitle в aoColumnsRef и отправил обратно в datatables теперь свой рабочий :) –

Смежные вопросы