jqGrid獲取json資料方法
jqGrid是個好東西,自己百度即可知道。
先宣告一下,jquery從1.4開始,對json資料格式要求很嚴格,不允許使用''單引號,必須使用""雙引號。
要獲取json資料時,呼叫方式通常如下:
$(function () {
$("#list47").jqGrid({
url:'./AjaxHandler/jqGrid_Jsondata_Content.ashx?page=2',
datatype: "json",
height: "auto",
rowNum: 30,
colNames: ['nothing1', 'nothing2', 'nothing3'],
colModel: [
{ name: 'content', index: 'content', 350, sorttype: "string" },
{ name: 'author', index: 'author', 80, sorttype: "string", formatter: "string" },
{ name: 'datetime', index: 'datetime', 80, sorttype: "string", formatter: "string" }
],
pager: "#plist47",
viewrecords: true,
sortorder: "desc"
});
});
這裡的json格式是很講究的,必須遵循官方文件約定的格式,不能自由。可選的資料型別為json or jsonp, (or jsonstring)
jqgrid讀取json的時候,需要配置jsonReader才能讀取,不過jsonReader有預設值,通常不需要做配置。
jsonReader預設值如下
jQuery("#gridid").jqGrid({
...
jsonReader : {
root: "rows", //root這裡的值是rows,意味著它會讀取json中的rows鍵的值,這個值就是真實的資料
page: "page", //root這裡的值是page,意味著它會讀取json中的page鍵的值,當前頁號 total: "total",//總的頁數
records: "records",//總記錄數
repeatitems: true,//如果設為false,則jqGrid在解析json時,會根據name來搜尋對應的資料元素(即可以json中元素可以不按順序);而所使用的name是來自於colModel中的name設定。
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {root:"rows",
repeatitems: true,
cell:"cell"
}
},
...
});
如果資料型別是json,那麼預設的期望得到的json字串格式{
"total": "xxx",
"page": "yyy",
"records": "zzz",
"rows" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
{"id" :"2", "cell":["cell21", "cell22", "cell23"]},
...
]
}
root元素
這個root是描述資料在開始,也就是說root指明瞭一個包含資料的陣列。如果我們設定如下:
jQuery("#gridid").jqGrid({
...
jsonReader : {root:"invdata"},
...
});那麼返回的json字串應該如下:
{
"total": "xxx",
"page": "yyy",
"records": "zzz",
"invdata" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
{"id" :"2", "cell":["cell21", "cell22", "cell23"]},
...
]
}
page,total,records
元素描述了pager需要的資訊,如果jsonReader如下設定jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords"
},
...
});那麼期望得到的json字串如下:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
cell
元素描述了包含行資料的陣列,如果jsonReader如下設定jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
cell: "invrow"
},
...
});那麼期望得到的json字串如下:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "invrow" :["cell11", "cell12", "cell13"]},
{"id" :"2", "invrow" :["cell21", "cell22", "cell23"]},
...
]
}id此元素描述了每一行的唯一的id值,如果jsonReader如下設定jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
cell: "invrow",
id: "invid"
},
...
});
那麼期望得到的json字串如下: {
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"invid" :"1", "invrow" :["cell11", "cell12", "cell13"]},
{"invid" :"2", "invrow" :["cell21", "cell22", "cell23"]},
...
]
}
可以將cell元素設定為空字串,也可以將id設定為數字,如果這樣的話,例子如下
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
cell: "",
id: "0" 設為數字的話,rowid=第0個格子的內容,此處rowid=cell11,rowid=cell21
},
...
});這樣的話,id就是行資料的第一個元素
{
"totalpages" : "xxx",
"currpage" : "yyy",
"totalrecords" : "zzz",
"invdata" : [
["1", "cell11", "cell12", "cell13"],
["2", "cell21", "cell22", "cell23"],
...
]
}
repeatitems
此元素設定為ture,則cell裡的元素順序和colModel的順序一致,按順序顯示。如果要讓jqGrid根據json資料搜素元素,則把repeatable設定為false,此時設定cell屬性無意義。
jQuery("#gridid").jqGrid({...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false,
id: "0"
},
...
});
期望的json字串如下:
{
"totalpages" : "xxx",
"currpage" : "yyy",
"totalrecords" : "zzz",
"invdata" : [
{"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"},
{"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},
...
]
}
此時,id就是第0個元素,即invid的值
總結的說 repeatitems是true的情況下, id是數字表示rowdata裡面的位置,即cell裡的位置,repeatitems是false的情況下, id是數字直接代表在json裡面的位置。repeatitems:false 設為false是很有用的,這樣的話就不必按照colModel的順序來元件model。
{
"totalpages" : "xxx",
"currpage" : "yyy", "
totalrecords" : "zzz",
"invdata" :
[
{"invid" :"1", "invdate" : "cell11", "note" :"somenote"},
{"invid" :"2", "amount" : "cell22", "tax" :"cell23", "total" :"2345"}, ...
]
}
JSON String
如果datatype設定為jsonstring,和json是差不多的,只不過需要在本地構造一個json字串,而不是透過ajax方式獲得。
使用json資料的時候,可以使用name.notation這種形式。例子如下:(repeatitems=false)
colModel:[
{name:'name',label:'Name', true},
{name:'id', sorttype:"int", editable: true},
{name:'email',label:'Email', true,formatter:'email'},
{name:'stock',label:'Stock', align:"center", editable: true,formatter:'checkbox',edittype:"checkbox"},
{name:'item.price',label:'Price', align:"right", editable: true,formatter:'currency'},
{name:'item.weight',label:'Weight', align:"right", editable: true,formatter:'number'},
{name:'ship',label:'Ship Via', editable: true,formatter:'select', edittype:"select",editoptions: {value:"2:FedEx;1:InTime;3:TNT;4:ARK;5:ARAMEX"}},
{name:'note',label:'Notes', sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"20"}}
],
期望的json格式如下
{
"page":"1",
"total":2,
"records":"13",
"rows":[
{"id":"12345","name":"Desktop Computers","email":"josh@josh.com","item":{"price":"1000.72", "weight": "1.22" }, "note": "note", "stock": "0","ship": "1"},
{"id":"23456","name":"laptop","note":"Long text ","stock":"yes","item":{"price":"56.72", "weight":"1.22"},"ship": "2"},
{"id":"34567","name":"LCD Monitor","note":"note3","stock":"true","item":{"price":"99999.72", "weight":"1.22"},"ship":"3"},
{"id":"45678","name":"Speakers","note":"note","stock":"false","ship":"4"}
]
}
通常jsonReader中的一些引數值可以從伺服器端獲得,但是某些情況下,也可以使用函式來獲得,具體例子如下:
jsonReader: {
repeatitems: false,
id: "Id",
root: function (obj) { return obj; },
page: function (obj) { return 1; },
total: function (obj) { return 1; },
records: function (obj) { return obj.length; }
}
obj 是從伺服器端獲得的響應。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2813239/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前端常用的echart獲取地圖json方法前端地圖JSON
- 讀取JSON資料JSON
- 關於如何獲取資料的方法
- 讀取JSON資料存入表格JSON
- Django Models隨機獲取指定數量資料方法Django隨機
- 獲取方法
- Python獲取jsonp資料PythonJSON
- 1.獲取資料
- 獲取Wireshark資料流
- Modbus ASCII 獲取資料ASCII
- datatables 獲取 pageLength 和 pageStart,重新獲取table資料
- React 中獲取資料的 3 種方法:哪種最好?React
- 獲取天氣介面資料
- Mysql批量大資料獲取MySql大資料
- 【譯】React如何獲取資料React
- datatables使用ajax獲取資料
- 如何獲取想要的資料?
- 從session中獲取資料Session
- 從json物件中讀取資料存入表格JSON物件
- 前端封裝成json資料和json陣列的方法前端封裝JSON陣列
- 如獲取獲取關聯資料的文件跟模型的關聯資料集呢模型
- 怎樣獲取jstree的節點資料_大資料獲客是怎樣獲取精準客源的JS大資料
- Thinkphp5框架實現獲取資料庫資料到檢視的方法PHP框架資料庫
- Spring多資料來源獲取Spring
- JavaScript獲取物件資料型別JavaScript物件資料型別
- 微信小程式—— 獲取資料微信小程式
- 從 falcon api 中獲取資料API
- ros|TF工具獲取IMU資料ROS
- SpringMVC的資料獲取問題SpringMVC
- Flutter 中的資料的獲取Flutter
- 介面測試之 json 中的 key 獲取JSON
- 介面測試之json中的key獲取JSON
- created mounted 動態獲取資料渲染後,獲取DOM問題
- 獲取jwt(json web token)中儲存的使用者資訊JWTJSONWeb
- React-hooks 父元件透過ref獲取子元件資料和方法ReactHook元件
- Oracle database 19c中獲取當前資料庫版本的方法OracleDatabase資料庫
- 自定義jqGrid編輯功能,當行獲取焦點時編輯,失去焦點時儲存
- 獲取json串裡的某個屬性值JSON