jqGrid - 如何配置 jsonreader(与 Jayrock 一起使用)?
Posted
技术标签:
【中文标题】jqGrid - 如何配置 jsonreader(与 Jayrock 一起使用)?【英文标题】:jqGrid - How does one configure jsonreader (for use with Jayrock)? 【发布时间】:2009-06-29 16:35:49 【问题描述】:我想知道是否有人对此有所了解。 jqGrid 对这个 JSON 字符串非常满意:
'page':'1','total':1,'records':'4','rows':['id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00']
Jayrock(.NET JSON-RPC 框架)提供 JSON 字符串:
id:'-1','result':'page':'1','total':1,'records':'4','rows':['id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00','id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00']
即它在工作 JSON 周围添加了一个“id:'-1','result': /* ... snip ... */
”包装器。
是否有将 jqGrid 的 jsonReader 属性指向正确的位置以开始解析 JSON 结果?这一切我都玩得很开心:)
--- 编辑---
我想发布一个简单的示例...感谢您的回答,Stuntz。以下示例只需要 .NET、Jayrock、jQuery 和 jqGrid。这适用于上述 JSON。我忘了你是否需要设置内容类型。
var lastsel; // last row selected (for editing)
jQuery(document).ready(function()
jQuery("#mygrid").jqGrid(
contentType: "text/plain; charset=utf-8",
datatype: function(postdata)
$.ajax(
url: 'http://localhost:2064/StoryManager/StoryManager.ashx/getPageItemRoles?id=3',
data: postdata,
complete: function(response, status)
if(status=='success')
var mygrid = jQuery("#mygrid")[0];
var o = eval("(" + response.responseText + ")"); // TODO don't use eval. it's insecure, but older browsers support it...
mygrid.addJSONData(o.result);
)
,
colNames:['ID', 'Title', 'Assigned To', 'Assigned', 'Due', 'Completed'],
colModel:[
name:'id', label:'ID', jsonmap:'id', hidden: true, editrules: edithidden: true ,
name:'title', jsonmap:'title', editable: true,
name:'assignedto', label:'Assigned To', jsonmap:'assignedto', editable: true,
name:'assigned', jsonmap:'assigned', editable: true,
name:'due', jsonmap:'due', editable: true,
name:'completed', jsonmap:'completed', editable: true
],
jsonReader:
repeatitems: false
);
);
【问题讨论】:
您好,您可以分享解决方案文件吗?我一直在尝试使用 Jaryrock 和 Jqgrid 几天但没有成功。 嗨,我从来没有真正让它与 JSON 一起工作,所以转而使用 XML。如果您对此感兴趣,我可以在网上发布一些内容。对于 Jayrock/JSON,有人建议我可以这样做:forums.asp.net/t/1430017.aspx 【参考方案1】:不,您不能通过 jsonReader 执行此操作。在内部,网格会:
ts.p.page = data[ts.p.jsonReader.page];
...这不适用于虚线子属性。
相反,您需要通过将数据类型设置为函数来手动获取网格数据。然后,您可以使用 $.ajax 获取数据,并在它返回时调用 grid.addJsonData,就像网格一样,除了传递整个响应之外,您将传递响应的子属性。
【讨论】:
您认为这会奏效,对吧?你以前做过类似的事情吗?似乎对我不起作用,除非我错过了什么...... 我确实配置了 jsonReader,但不像你那样。我检查了源代码,我可以看到问题。我会更新的。 非常感谢。一直以来,我都认为 $.ajax 表示法是 ASP.NET 的一部分。看起来我和 jQuery 文档需要一些单独的时间!【参考方案2】:这篇文章和链接真的很有帮助。 我还不清楚它是如何工作的,但我想我会发布这个来帮助别人减轻他们的痛苦:)
这是从 getRecords 返回的 JSON:
"id":-1,"result":"page":"1","total":"1","records":"2","rows":["id": "13","invdate":"2007-10-06","name":"客户 3","amount":"1000.00","tax":"0.00","total":"1000.00","note":"","id":"12","invdate":"2007 -10-06","名称":"客户 2","amount":"700.00","tax":"140.00","total":"840.00","note":"no 税"]
这是工作代码:
jQuery(document).ready(function()
jQuery("#list4").jqGrid(
contentType: "text/plain; charset=utf-8",
datatype: function(postdata)
$.ajax(
url: 'http://localhost/Booga/Baba.ashx/getRecords',
data: "", // For empty input data use "",
dataType: "json",
type: "GET",
contentType: "application/json; charset=utf-8",
complete: function(response, status)
if(status=='success')
var mygrid = jQuery("#list4")[0];
var o = eval("(" + response.responseText + ")");// TODO don't use eval. it's insecure, but older browsers support it...
mygrid.addJSONData(o.result);
)
,
colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
name:'id',index:'id', width:55,
name:'invdate',index:'invdate', width:90, jsonmap:"invdate",
name:'name',index:'name asc, invdate', width:100,
name:'amount',index:'amount', width:80, align:"right",
name:'tax',index:'tax', width:80, align:"right",
name:'total',index:'total', width:80,align:"right",
name:'note',index:'note', width:150, sortable:false
],
jsonReader:
repeatitems: false
);
);
顺便说一句,有谁知道为什么使用 eval 是不安全的?看看我的代码的评论。我从 forum.asp 链接中获取了该部分。
【讨论】:
【参考方案3】:即它在工作的 JSON 周围添加了一个 "id:'-1','result': /* ... snip ... */ " 包装器。
这是 JayRock 处理 SMD 响应方式的副作用...“id”是“响应标识符”,是异步通信的辅助工具。
因此,如果您触发了一堆异步请求(并且不等待响应),您可以指定“请求 ID”,JayRock 将尊重它...所以您可以将响应与请求。
我希望这有点道理。
【讨论】:
以上是关于jqGrid - 如何配置 jsonreader(与 Jayrock 一起使用)?的主要内容,如果未能解决你的问题,请参考以下文章