论坛首页 AJAX版 EXT

.net webservice与ext通信 问题

浏览 462 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-07-11
利用类似asp.net ajax的通信机制,ext用过Ext.ajax也可以与webservice通信,从客户端请求返回json字符串,然后通过Ext.json.decode解码成json对象,填充gridPanel,但出现一个很奇怪的问题,传输的json如果是数组的形式,如[{id:1,name:ext},{id:2,name:'ext2'}]或者[{'id':1,'name':'ext'},{'id':2,'name':'ext2'}]的数据就可以填充到gridPanel,而当json字符串是{'results':4,'rows':[{"id":1,"name":"aaa","organization":"23","homepage":"135"},{"id":1,"name":"aaa","organization":"23","homepage":"135"},{"id":0,"name":"test","organization":"wblog","homepage":"www.witperblog.cn"},{"id":1,"name":"test","organization":"wblog","homepage":"www.witperblog.cn"}]}
这种形式的时候,经过decode变成json对象后,填充gridPanel的时候会出现prototype为空或不为对象,调试后发现是json对象下的prototype为空,再调试json对象,typeof jsonData的结果是object,那它的prototype怎么是空呢?不解,请大家帮帮忙,下面是代码:


Ext.onReady(function(){

Ext.QuickTips.init();

Ext.Ajax.on('beforerequest', function(conn, options){
conn.defaultHeaders = {'Content-Type': 'application/json; charset=utf-8'}
});

Ext.Ajax.on('requestcomplete', function(conn, response, options){

response.responseText = Ext.util.JSON.decode(response.responseText);
});


var param ="{id:1,name:'EasyJWeb',organization:'EasyJF',homepage:'www.easyjf.com'}";

Ext.Ajax.request({

url:"WebService.asmx/getJson",
method:"POST",
jsonData:{name:param},
success:onSuccess,
failure:onFailure
});


function onSuccess(response,options)
{

Ext.Msg.alert("Data",response.responseText);

var dataStr = response.responseText;

var dataJson =new Ext.util.JSON.decode(dataStr);


var record =Ext.data.Record.create([{name:"id",mapping:"id"},{name:"name",mapping:"name"},{name:"organization",mapping:"organization"},{name:"homepage",mapping:"homepage"}]);

var reader =new Ext.data.JsonReader({totalProperty:"results",root:"rows",id:"id"},record);


var store = new Ext.data.JsonStore({autoLoad:true,data:dataJson,reader:reader});

store.load();

var nm = new Ext.grid.RowNumberer();

var selM = new Ext.grid.CheckboxSelectionModel();

var colM=new Ext.grid.ColumnModel([nm,selM,{header:"序号",dataIndex:"id",sortable:true},{header:"项目名称",dataIndex:"name",sortable:true,tooltip:"项目名称"},

{header:"开发团队",dataIndex:"organization",sortable:true},

{header:"网址",dataIndex:"homepage",sortable:true}]);



var grid = new Ext.grid.GridPanel({

renderTo:"hello",

viewConfig:{forceFit:true},

title:"ExtJs test",

height:300,

iconCls:'icon-grid',

trackMouseOver:true,

frame:true,

width:600,

cm:colM,

sm:selM,

store:store,

animCollapse:true,

collapsible:true,


tbar:[{
id:'btnAdd',
text:'新增',
tooltip:'新增',
iconCls:'add',
handler:showAddPanel
},'-',{
text:'查询',
tooltip:'查询',
iconCls:'search'
},'-',{
text:'批量删除',
tooltip:'删除',
iconCls:'remove'
}]

});
});


其实webservice返回的json字符串是:
{'results':4,'rows':[{"id":1,"name":"aaa","organization":"23","homepage":"135"},{"id":1,"name":"aaa","organization":"23","homepage":"135"},{"id":0,"name":"test","organization":"wblog","homepage":"www.witperblog.cn"},{"id":1,"name":"test","organization":"wblog","homepage":"www.witperblog.cn"}]}
   
时间:2008-07-11
刚刚找到解决的办法,写了一大堆,后来发表,竟然不成功,心血啊
   
0 请登录后投票
时间:2008-07-11
查了很多资料,找到官方论坛,发现JsonStore的不支持reader属性,reader属性是继承于Store,为何不支持呢?官方解释:“JsonStore doesn't have a reader config option (only Store has one).”,他给出的解决办法是:
Use:

var jsonStore = new Ext.data.Store({
url: 'myurl',
reader: new Ext.data.JsonReader({}, ['id', 'name'])
});

or

var jsonStore = new Ext.data.JsonStore({
url: 'myurl',
fields: ['id', 'name']
});

从他第一个解决的办法,可以看出JsonStore还是可以有reader这个属性,感觉莫名其妙,由此相处上面提到的解决办法:

var store = new Ext.data.JsonStore({root:"rows",fields:[{name:"id",mapping:"id"},{name:"name",mapping:"name"},{name:"organization",mapping:"organization"},{name:"homepage",mapping:"homepage"}]});

store.loadData(dataJson);

在JsonStore创建的时候不定义data或者url属性,而是创建后利用loadData()方法动态加载json对象,对于这样反而成功,我不得其解,为什么对象创建的时候赋予数据不沉成功,创建后动态加载反而成功?前者会出现prototype为空的错误信息。调试会跳转到源文件里面,叫人很无奈,调试ext是一个问题。正在研究其源码...
   
0 请登录后投票
时间:2008-07-14
几天后,竟然没人可以解释这个问题吗?我发觉extjs数据通信太麻烦了,虽然只要格式是json或者xml就可以通信,但是总是出现莫名其妙的错误

ps:本人用extjs 2.1 + .net 测试
   
0 请登录后投票
时间:2008-08-08
去得 store.load();
   
0 请登录后投票
论坛首页 AJAX版 EXT

跳转论坛:
JavaEye推荐