Отображение данных JSON в JQGrid
Я использую jqGrid 3.6.4 и jquery 1.4.2 . в моем примере я получаю следующий формат данных json, и я хочу сопоставить эти данные json в строки jqgrid
{
"page": "1",
"total": 1,
"records": "6",
"rows": [
{
"head": {
"student_name": "Mr S. Jack ",
"year": 2007
},
"sub": [
{
"course_description": "Math ",
"date": "22-04-2010",
"number": 1,
"time_of_add": "2:00",
"day": "today"
}
]
}
]
}
мой код jqgrid выглядит следующим образом
jQuery("#"+subgrid_table_id).jqGrid({
url:"http://localhost/stud/beta/web/GetStud.php?sid="+sid,
dtatype: "json",
colNames: ['Stud Name','Year','Date'.'Number'],
colModel: [ {name:'Stud Name',index:'student_name', width:100, jsonmap:"student_name"},
{name:'Year',index:'year', width:100, jsonmap:"year"},
{name:'Date',index:'date', width:100, jsonmap:"date"},
{name:'Number',index:'number', width:100, jsonmap:"number"}
],
height:'100%',
jsonReader: { repeatitems : false, root:"head" },
});
Итак, теперь проблема в том , что мои данные, т. е. student_name и year находятся под "head", jqgrid позволяет найти эти два поля. в то же время другие два значения столбцов, т. е. дата и номер, лежат под "sub", и даже эти столбцы я не могу сопоставить его с jqgrid
поэтому любезно помогите мне, как найти эти атрибуты в JQGrid.
спасибо
1 ответов
прежде всего, в опубликованном коде есть некоторые ошибки, такие как dtatype: "json"
вместо datatype: "json"
. "},});
" вместо "}});
" в конце кода colNames: ['Stud Name','Year','Date'.'Number']
вместо colNames: ['Stud Name','Year','Date','Number']
. После исправления этой ошибки вам нужно изменить jsonmap
значения. Это был ваш главный вопрос. Исправленный код будет выглядеть следующим образом:
jQuery("#"+subgrid_table_id).jqGrid({
...
datatype: 'json',
colNames: ['Stud Name','Year','Date'.'Number'],
colModel: [
{name:'student_name', width:100, jsonmap:"head.student_name"},
{name:'year', width:100, jsonmap:"head.year"},
{name:'date', width:100, jsonmap:"sub.0.date"},
{name:'number', width:100, jsonmap:"sub.0.number"}
],
jsonReader: { repeatitems:false, root:"rows" }
});
вы должны исправить root
на "rows
" и использовать jsonmap
на JSON точка обозначения (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_dot_notation) - ... Я использую немного странную нотацию, как"sub.0.number
", поскольку sub.0.number
в JavaScript это то же самое, что sub[0].number
. Теперь работает.
я рекомендую вам подумать еще об одной структуре данных JSON, которые вы получаете. (см. мои предыдущие комментарии к вам вопрос): Является ли элемент" sub " действительно массивом с всегда одним элементом или вы хотите использовать подрешетки? Вероятно, данные должны быть изменены от sub:[{"":"", ...}]
to sub:{"":"", ...}
? Что вы хотите использовать в качестве rowid? student_name
? Затем добавьте id: "head.student_name"
до jsonReader
определение или добавить key: true
свойство для определения столбца student_name
. Или вы забыли включить его в данные JSON?
и последнее предложение. Если вы откроете http://trirand.com/blog/jqgrid/jqgrid.html и открывает в левой части дерева ветку "отображение данных" \ "оптимизация данных" вы увидите пример, где вместо массива используется только массив именованные элементы в JSON. Такие данные будут иметь минимальный размер и могут быть быстрее переданы с сервера на клиент. Вместо этого у вас есть некоторые поля (например,"course_description"), который вы вообще не используете. Так что если вы можете внести какие-либо изменения в сервер код попробуйте оптимизировать скорость передачи данных.