使用Extjs和服务器端返回以下3+:
{"com.klistret.cmdb.ci.pojo.QueryResponse": {"com.klistret.cmdb.ci.pojo.successful":true,"com.klistret.cmdb.ci.pojo.count":1,"com.klistret.cmdb.ci.pojo.elements":{"com.klistret.cmdb.ci.pojo.id":123,"com.klistret.cmdb.ci.pojo.name":"Mars","com.klistret.cmdb.ci.pojo.fromTimeStamp":"2010-07-08T16:38:00.478+02:00","com.klistret.cmdb.ci.pojo.createTimeStamp":"2010-07-08T16:38:00.478+02:00","com.klistret.cmdb.ci.pojo.updateTimeStamp":"2010-10-25T15:02:09.446+02:00","com.klistret.cmdb.ci.pojo.type":{"com.klistret.cmdb.ci.pojo.id":1,"com.klistret.cmdb.ci.pojo.name":"{http:\/\/www.klistret.com\/cmdb\/ci\/element\/logical\/collection}Environment","com.klistret.cmdb.ci.pojo.fromTimeStamp":"2009-08-05T11:20:12.471+02:00","com.klistret.cmdb.ci.pojo.createTimeStamp":"2009-08-05T11:20:12.471+02:00","com.klistret.cmdb.ci.pojo.updateTimeStamp":"2009-08-05T11:20:12.471+02:00"},"com.klistret.cmdb.ci.pojo.configuration":{"@www.w3.org.2001.XMLSchema-instance.type":"com.klistret.cmdb.ci.element.logical.collection:Environment","@Watermark":"past","com.klistret.cmdb.ci.commons.Name":"Mars"}}}}读卡器的设置如下:
var reader = new CMDB.JsonReader(
{
totalProperty : 'com.klistret.cmdb.ci.pojo.count',
successProperty : 'com.klistret.cmdb.ci.pojo.successful',
idProperty : 'com.klistret.cmdb.ci.pojo.id',
root : 'com.klistret.cmdb.ci.pojo.elements'
},
[
{name: 'Id', mapping: 'com.klistret.cmdb.ci.pojo.id'},
{name: 'Name', mapping: 'com.klistret.cmdb.ci.pojo.name'}
]
);存储为:
var ds = new Ext.data.Store({
proxy : new Ext.data.ScriptTagProxy({
url : 'http://sadbmatrix2:55167/CMDB/resteasy/element'
}),
reader : reader
});读取器按照http://erichauser.net/2007/11/07/more-wcf-json-and-extjs/所解释的那样扩展Ext.data.JsonReader,以删除从服务器返回的JSON中的"com.klistret.cmdb.ci.pojo.QueryResponse“开始节点。
扩展读取器永远不会被调用。假设问题是由于在返回的JSON对象中具有完全限定的属性名称(即。"com.klistret.cmdb.ci.pojo.name“而不仅仅是"name")。
有没有人用过这个?
发布于 2010-12-08 11:55:32
我们在评论中解决了这个问题(好吧,主要是Matthew做的):
ScriptTagProxy需要服务器将JSON数据包装在函数调用中,以便您的本地代码可以访问它。
而不是服务器发出类似如下的内容:
{here:'is data}它需要回归
somefunc("{here:'is data'}");这样,您的somefunc()客户端实现就会被调用,并可以处理返回的数据。
https://stackoverflow.com/questions/4359026
复制相似问题