Ajax的异步请求有时候会带来一些问题,如在Ext做的页面中,需要加载一个 JsonStore数据集,在紧跟着的代码中可能就会对数据集进行访问的操作,由于异步请求很可能导致数据未加载完就开始访问,结果可能会不是想要的结 果。这里load方法中提供了一个callback回调函数,可以解决延迟加载的问题,我们需要处理的一部分代码可以放在callback函数中处理,这 样就解决了异步请求带来的问题。如:
Js代码1.var collectIndex_ds = new Ext.data.JsonStore({ 2. url: '', 3. root: 'collectIndexs', 4. id: 'id', 5. fields:[ 6. {name:'id'}, 7. {name:'userViewId'}, 8. {name:'timeType'}, 9. {name:'measureUnitId'} 10. ] 11. }); var collectIndex_ds = new Ext.data.JsonStore({ url: '',root: 'collectIndexs',id: 'id',fields:[{name:'id'},{name:'userViewId'},{name:'timeType'},{name:'measureUnitId'}]});其回调函数使用为
Java代码1.//使用回调方法,可以解决延迟加载的问题;这里使用回调时为了把userViewId项为空的加上默认值1 2. collectIndex_ds.load({ 3. callback :function(r,options,success){ 4. if(success){ 5. for(var i=0;i<r.length;i++){ 6. var record = r[i]; 7. var v = record.data.userViewId; 8. if(v==null || v==""){ 9. record.set("userViewId",1); 10. } 11. } 12. } 13. } 14. }); //使用回调方法,可以解决延迟加载的问题;这里使用回调时为了把userViewId项为空的加上默认值1collectIndex_ds.load({ callback :function(r,options,success){ if(success){ for(var i=0;i<r.length;i++){ var record = r[i];var v = record.data.userViewId;if(v==null || v==""){ record.set("userViewId",1);}}}}});Ext官网关于callback的解释
引用callback : Function
A function to be called after the Records have been loaded. The callback is called after the load event and is passed the following arguments:
* r : Ext.data.Record[]* options: Options object from the load call* success: Boolean success indicator
因为回调都用的是异步技术,我们还可以直接采用同步处理,掉用的代码如下
unction syncCall(url, params) { var obj; var value; if (window.ActiveXObject) { obj = new ActiveXObject('Microsoft.XMLHTTP'); } else if (window.XMLHttpRequest) { obj = new XMLHttpRequest(); } obj.open('POST', url, false); obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); obj.send(params); var result = Ext.JSON.decode(obj.responseText); return result;}