关于jquery easyui datagrid执行多次的问题
2014-11-06 17:18
477 查看
关于jquery easyui datagrid执行多次的问题
今天终于解决了一个困扰了我很久的问题,大概情况如下代码所示:var gridHelper = { isInit : false,//是否已经初始化datagrid标志 isRefresh : true,//是否需要刷新datagrid数据的标志 initGrid : function(){ if(!gridHelper.isInit){ $("#datagrid").datagrid({ //options,这里不定义URL和queryParams }); gridHelper.isInit = true; } if(gridHelper.isRefresh){ var $grid = $("#datagrid"); $.extend($grid.datagrid("options"),{ url : "",//这里定义url queryParams : {}//根据实际情况定义参数 }); $grid.datagrid("load");//这行代码执行后发送了两次请求 gridHelper.isRefresh = false; } } };
当initGrid方法第一次执行时,发现后台获取数据的方法执行了两次,但我初始化datagrid的时候并没有定义URL属性,肯定也不会发送请求;往下代码能发送请求的就只有$grid.datagrid("load")这一句,最多也只会发送一次,但事实是两次,这是为什么呢,难道这是easyui的一个BUG吗?经过断点调试与思考,我发现datagrid在初始化的时候,即使不定义URL属性,也会有“处理中,请稍候。。。”这样的加载中效果(持续那么一瞬间),但是肯定没有发送请求的,估计源码中通过setTimeout来实现。问题就出在这里了,就是在setTimeout的过程中,我下面的代码定义了URL属性,setTimeout后发现URL被定义了,所以照样发送了一个请求,然后我load了一次,又重复发送了一个请求。了解了这样的原理后,我通过加入setTimeout解决了这个问题:
if(gridHelper.isRefresh){ window.setTimeout(function(){ var $grid = $("#datagrid"); $.extend($grid.datagrid("options"),{ url : "",//这里定义url queryParams : {}//根据实际情况定义参数 }); $grid.datagrid("load"); gridHelper.isRefresh = false; },100);//延迟100毫秒执行,时间可以更短 }
这样,以上代码就只会发送一次请求了!纯属个人见解,有问题请提出,大家一起交流!
相关文章推荐
- jquery easyUI combox datagrid 多次请求的问题
- jquery easyui关于datagrid新增一行 combobox 默认选中第一项问题
- 关于Wcf事件多次执行的问题
- 关于jquery Easyui DataGrid IE下慢的问题解决办法
- jquery easyui datagrid请求两次或多次的问题解决方法
- (转)关于jquery的$(document).on()事件多次执行的问题
- 关于jquery easyui datagrid的一个小问题
- 关于DataGrid Web控件的热门问题
- 关于DataGrid自动分页的不能显示的问题
- 对不起,各位哥哥,我有一个问题向你们请教,请多多指教关于C#DataGrid的问题,特急!!!
- 关于DataGrid的问题
- 关于动态生成列的DATAGRID不能出发模板列的时间问题
- 关于DataGrid的动态排序问题
- 关于模态对话框关闭之后继续执行服务器端代码的问题
- 关于DataGrid Web控件的热门问题
- 关于不同sql语句执行效率的问题
- 关于给处于编辑中的datagrid的编辑框指定宽度的问题
- 关于DataGrid最后一页只有一行记录时,删除此记录出错的问题
- 关于VS2005里面的FormClosing事件内添加对话框后重复执行的问题
- 关于Form KeyDown事件的处理代码执行两次的问题