store callback的问题

store定义,根是root
[code]
var ds_report = new Ext.data.Store({
url : 'GetReportList.action',
reader : new Ext.data.JsonReader({
totalProperty : 100,
root : 'root'
}, [{
name : 'name'
}, {
name : 'configXml'
}, {
name : 'fsny'
}, {
name : 'areaCode'
}, {
name : 'tjlCode'
}, {
name : 'state'
}, {
name : 'excel'
}])
});
[/code]

store加载,msg是当success是false时的错误信息
[code]
ds_report.load({
params : {
fsny :fsny.getValue(),
areaCode : area.getValue(),
tjlCode : jigoulei.getValue()
},
callback: function(r, options, success){

if(success){

Ext.Msg.alert('操作','成功!');

}else if (r[0] && r[0].msg) {
Ext.Msg.alert('',r[0].msg);
}
}

});
[/code]

当返回值是{success:false,root:[{msg:'你没有权限查看该地区报表!'}]}时,竟然显示“操作成功”的会话框,并且在grid中多了一行空记录。(使用root返回错误信息的原因是callback函数中没办法取到{success:false,msg:'没有权限'}中的msg的值)

为什么json的success是false,而callback中的却是true?是不是callback的success的值不是取自返回的json数据,请解答。

[b]问题补充:[/b]
谢谢atian25 辛苦作答。
设置successProperty:'success'也没有用,感觉callback里边的success应该是表示store是否加载成功,所以json返回succes没有用。

不过问题也解决了:
1.r[0].msg是取不到的,应该用r[0].get('msg')
2.因为json里success不起作用,所以json里边不用返回success了,用if(r[0].get('msg'))来判读是否成功
callback里边应这么写:
[code]
callback : function(r, options, success) {
if(r[0]){
msg = r[0].get('msg');
if(msg){
ds_report.removeAll();
Ext.Msg.alert('提示',msg);
}
}
}
[/code]

3个回答

刚测试了下了,
你是2.2版本的吧,
返回的json应该是:
{
metaData: {
success:false,
},
data:[
{name:'xx'}
]
}

sucess在metaData里面.

3.0的话,就可以在外面.

successProperty没指定

详细的看看store的load,loadData,loadRecord的源码吧.
还有JsonReader.readRecords.

一般直接监听store的load事件和loadexception事件(3.0是exception)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐