我想知道有没有人能对此有所了解。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 ( JSON-RPC framework)将.NET字符串提供为:
{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
}
});
});发布于 2009-06-29 18:19:12
不,您不能通过jsonReader完成此操作。在内部,网格执行以下操作:
ts.p.page = data[ts.p.jsonReader.page];...which不适用于点划子属性。
相反,您需要通过将datatype设置为函数来手动获取网格数据。然后,您可以使用$.ajax获取数据,并在数据返回时调用grid.addJsonData,就像网格一样,不同之处在于您将传递响应的子属性,而不是传递整个响应。
发布于 2010-07-02 23:23:35
这篇文章和链接真的很有用。我还不清楚这是如何工作的,但我想我只是想发布这篇文章来帮助某人减轻他们的痛苦:)
这是从getRecords返回的JSON:
{"id":-1,“结果”:{“页面”:“1”,“总数”:“1”,“记录”:“2”,“行”:{“id”:“13”,"invdate":"2007-10-06",“名称”:“客户端3",”金额“:”1000.00“,"tax":"0.00","total":"1000.00","note":""},{"id":"12","invdate":"2007-10-06","name":"Client 2","amount":"700.00","tax":"140.00","total":"840.00",“note”:“无税”}}
这是工作代码:
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链接上拿到的那部分。
发布于 2012-02-10 06:05:10
结果,即它在工作的JSON周围添加了一个"{id:'-1',‘
’:{ /* ... snip... */ }}“。
这是JayRock处理SMD responses...the的方式的一个副作用。"id“是一个”响应标识符“,是异步通信的辅助工具。
因此,如果你发出了一堆异步请求(不要等待响应),你可以指定“请求ID”,JayRock会支持that...so,你可以将响应与请求排成一列。
我希望这有点道理。
https://stackoverflow.com/questions/1059251
复制相似问题