ext的Ext.data.JsonStore不自动获取数据的问题记录

昨天在一个项目当中发现ext的JsonStore在IE的某些状况下并不能够自动后台的Action获取json数据,问题原因到现在也没有查清楚。在本机的开发环境下对外发布服务一切正常,但是部署到公司的单元测试环境后,还是有些主机通过IE无法访问(用其他的浏览器比如火狐很正常)。

这里需要记录的就是问题的部分解决,原来通过本机设置JsonStore的autoLoad为true的时候,对外发布会一部分主机IE访问不正常,而改成了手动load数据,那么通过自己的开发环境对外发布服务一切正常。

typestore =new Ext.data.JsonStore({
autoLoad:true,
url: root+'/issueType.do?method=getTypeList',
root: 'data',
fields:['typeId','typeName','typeDesc','displayOrder']
});

这是原来设置的一个JsonStore ,设置的属性autoLoad:true 让这个页面被加载的时候,自动地通过url为root+'/issueType.do?method=getTypeList' 来从后台的Action加载数据,通过解析json数据来绘制前台。也就是这个设定在一部分IE浏览器下不能够正常实现。

具体解决方法是不使用自动加载,设置为下面的方法

typestore =new Ext.data.JsonStore({
autoLoad:false,'displayOrder']
});

然后手动的拉数据来自于另外地方调用typestore.load();将全部的init函数贴出来

function to_init(){
Ext.QuickTips.init();

typeRecord = Ext.data.Record.create([
{name: "typeId",type: 'string'},
{name: "typeName",type:'string'},
{name: "typeDesc",
{name: "displayOrder",type:'string'}
]);
typestore =new Ext.data.JsonStore({
autoLoad:false,'displayOrder']
});

//alert(typestore.+"-----------");

var colModel = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{
header: "问题类型名称",
dataIndex:'typeName',
width: 300,
sortable: true,
renderer:"htmlEncode",
editor:new Ext.form.TextField({
allowBlank:false
})
},{
header: "问题类型描述",
dataIndex:'typeDesc',
width: 400,
editor:new Ext.form.TextField({
})
},{
header: "显示顺序",
dataIndex:'displayOrder',
width: 100,
editor:new Ext.form.NumberField({
allowBlank:false,
allowDecimals:false,
allowNegative:false,
style:'text-align:left;'

})
},
{ header: "删除",dataIndex:'typeName',width: 80,sortable: false,renderer:showDeleteUrl}
]);

typeGrid = new Ext.grid.EditorGridPanel({
id:'typeGrid',
title:'问题类型管理',
loadMask: {msg:'<bean:message bundle="common" key="js.message.loading"/>'},
trackMouSEOver:true,
stripeRows:true,
frame:true,
clicksToEdit: 1,
store: typestore,
cm:colModel,
iconCls:'icon_grid',

listeners:{//listeners
afteredit:function(e){//if-5
if(e.column==3){//if-4
if(!(e.record.get('displayOrder')!='0'&&e.record.get('displayOrder')=='')){//if-3
for(var i=0;i<typestore.getCount();i++){//for-1
var rec=typestore.getAt(i);
if(!(rec.get('displayOrder')!='0'&&rec.get('displayOrder')=='')){//if-2

//if-1 if(e.row!=i&&e.record.get('displayOrder')==rec.get('displayOrder')){ Ext.Msg.alert('<bean:message bundle="common" key="js.message.systemInfo"/>','与第【'+(i+1)+'】行显示顺序重复!'); if(e.column==3 ){ e.record.set('displayOrder',''); } break; }//if-1 }//if-2 }//for-1 }//if-3 }//if-4 }//if-5 },//listeners tbar:[{ text:'<bean:message bundle="common" key="btn.add"/>',iconCls:'icon_add',handler:function(){ var myNewRecord = new typeRecord({ typeId: '',typeName: '',typeDesc:'',displayOrder:'' }); typestore.add(myNewRecord); } }] }); mainPanel = new Ext.Panel({ layout:'border',frame:true,buttons:[ { text:'<bean:message bundle="common" key="btn.save"/>',handler:function(){ toSave(); } },{ text:'<bean:message bundle="common" key="btn.reset"/>',handler:function(){ Ext.getCmp('typeGrid').getStore().reload(); } } ],buttonAlign:'center',items:[{ region:'center',layout:'fit',autoScroll:true,items:typeGrid }] }); viewport = new Ext.Viewport({ layout:'fit',id:'viewport',items:mainPanel }); typestore.load(); };

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...