2011-06-25 2 views
0

Я пытаюсь загрузить данные json из контроллера web2py в jQuery dataTable через AJAX.
Но отображается только пустая dataTable (с желаемым форматированием, поле поиска и т. Д.)
Может кто-нибудь pl. укажите в мой код, где я ошибаюсь.
Данные не отображаются (как возвращается методом get_data).
Я убедился, что таблицы базы данных заполнены.

КонтроллерДанные JSON для jQuery dataTable в web2py

def show_data(): 
    return dict() 

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return custdata 

Для целей тестирования, я вернулся response.json (custdata) в отдельный метод & одобренного же на "jsonlint.com". Это действительно json.

View (show_data.html)


{{extend 'layout.html'}} 
$(document).ready(function() { 
    var oTable = $('.smarttable').dataTable({ 
     "sScrollY": "200px", 
     "sAjaxSource": "{{=URL('MIS','get_data.json')}}", 
     "sDom": "frtiS", 
     "bDeferRender": true 
    }); 
}); 

Наконец, HTML теги таблиц определяются для таблицы с классом = "smarttable"

ответ

1

Ваша функция get_data должна вернуть словарь, как это:

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return dict(data=custdata) 

В web2py, вид вызывается только если действие контроллера возвращает словарь - в противном случае, выход я контроллер s просто возвращается клиенту как есть (и как есть, custdata еще не преобразован в JSON).

Когда вы вызываете URL /MIS/get_data.json, расширение .json сообщает web2py искать файл представления /views/MIS/get_data.json, который будет использоваться для рендеринга JSON. Если он не находит этот файл просмотра, он будет пытаться использовать /views/generic.json, хотя он будет использовать generic.json только для локальных запросов, если вы не переопределите это, указав response.generic_patterns=['json'].

В качестве альтернативы использованию представления для визуализации JSON, вы могли бы также сделать:

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return response.json(custdata) 

EDIT: Плагин JQuery DataTables требует JSON, чтобы включить некоторые специальные параметры, так что вы должны добавить тех, кто вернулся в JSON. Чтобы упростить задачу, вы можете использовать PowerTable (плагин web2py для DataTables) или виджет jqGrid, включенный в plugin_wiki (виджет может использоваться на любой веб-странице, а не только на страницах вики).

+0

Я уже пытался вернуть dict (data = custdata) в «контроллер». Затем в «View» попытался получить доступ к этим данным: - «sAjaxSource»: «{{= URL ('MIS', 'get_data')}}", но не удался. Если response.json (custdata) используется и доступен непосредственно в браузере, он записывает json на страницу браузера. Но при доступе из «sAjaxSource» данные не отображаются. Я думаю, что что-то не так в том, как я называю метод get_data. Можете ли вы пл. помогите найти ошибку? .... Спасибо. – Vineet

+0

Является ли MIS вашим именем приложения или именем контроллера?URL() будет считать, что это имя контроллера и генерирует URL-адрес как/appname/MIS/get_data - это то, что оно должно быть, или должно быть/MIS/controller/get_data (в этом случае вам нужно заменить " MIS 'с именем контроллера в вашем вызове URL()). – Anthony

+0

У меня такая структура. a = 'MyWheels', c = 'MIS', f = 'get_data'. Таким образом, {{= URL ('MIS', 'get_data')}} должен работать. Но он не возвращает данные в dataTable. – Vineet

0

вы должны иметь «ключевые» значения в «словаре», которые вы даете для возврата.

iTotalRecords, iTotalDisplayRecords, sEcho и aaData. вы можете найти объяснения в http://datatables.net/usage/server-side

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