kowenzh 2009-06-30 10:45
浏览 316
已采纳

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条回答 默认 最新

  • iteye_10013 2009-06-30 11:57
    关注

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

    sucess在metaData里面.

    3.0的话,就可以在外面.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错