关于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毫秒执行,时间可以更短
        }

这样,以上代码就只会发送一次请求了!纯属个人见解,有问题请提出,大家一起交流!

转载于:https://www.cnblogs.com/weeksun23/archive/2013/04/13/3019478.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值