如题。最近遇到一个很奇葩的生产问题,ExtJS获取后台送回来的数据失败,后台的交易已经走完,也有JSON数据,但是前台的Store中数据为空。同样的代码,开发环境可以,UAT和生产点击下拉框之后没有数据送回来。
前台的Store:
Ext.define('Ext.store.Common.getBankFsStore',{
extend: 'Ext.data.store',
fields: ['fsName','fsId'],
autoLoad: true;
proxy: {
type: 'ajax',
url: 'common_getBankFs.action',
reader: 'json',
actionMethods: {
read: 'POST'
},
},
sorters: [{
property: 'fsId',
direction: 'ASC'
]}
});
解决方法:1.网上查找解决方案,查看是否是ID跟自定义的id不匹配,查看不是这个问题,我的后端定义是这样的。
String json = JsonTools.getJsonByMap(resultMap,"fsName","fsId");
responseWriter(json);
2.仔细比对了本地开发环境和测试环境的代码,发现均一致,没有不同。。。。遇到难点了,无从下手,既不报错也没有错误日志。因为后台交易走完了
但是前端没有拿到JSON,所以笔者去打了日志,把UAT环境下的后台JSON拿了出来,然后直接responseWriter写到前台。
神奇的是这次竟然成功了,我更加疑惑了,这是什么鬼。。。。字符串对应的结果可以,字符串变量就不行????
3.最终解决方案: 笔者观察了打印的日志,发现因为长度问题JSON自动分行了,我怀疑是我的JSOn数据过大导致自动分行,产生了
回车符转义字符,所以我的想法是去掉字符串中的所有空格,换行,
String json = JsonTools.getJsonByMap(resultMap,"fsName","fsId").replace("\r\n","\\r\\n");
responseWriter(json);
神奇的事情发生了,竟然成功了,成功了,功了,了。。。。。。。。一个由于转义字符引起的问题,用了差不多一两个礼拜才想到这样解决,还好解决了。恩。。。