这些天 我踩过的easyui的坑

来源:互联网 发布:淘宝网男士长袖t恤衫 编辑:程序博客网 时间:2024/04/27 19:09

坑1.分页

使用$('#grid').datagrid({});中的url调用数据查询处理的程序

前提条件:

a.  pagination: true

b . var p = grid.datagrid('getPager');
    $(p).pagination({
        pageSize: 10, //每页显示的记录条数,默认为10   
        pageList: [10, 15, 20, 30]//可以设置每页记录条数的列表   
    });

返回数据为{"total":28,"rows":[ { } , { } ] }这种形式就可以产生分页效果,在后台处理程序中获取page、rows参数,数据库查询语句采用分页语句

获取page,rows:

        var page = context.Request["page"];
        var rows = context.Request["rows"];
        page = (page == null ? "" : page);
        rows = (rows == null ? "" : rows);

        int p = int.Parse(page);
        int r = int.Parse(rows);


“坑”在:我的数据加载是基于查询按钮的,初始打开页面是不加载数据的,输入日期等条件点击查询按钮,返回json数据用loadData加载,数据可以加载成功,但是后台获取不到page,rows参数。而上述过程是基于datagrid直接用url加载数据产生的分页,由于分页是直接作用于datagrid上,所以通过datagrid自身的url可以实现分页并能获取到分页数据。

而我是外界给datagrid的数据,所以不会对其自身的分页产生效果。

解决方法:查询时仍然用datagrid的url ,而不用loadData去加载查询出的json数据,并用queryParams传递查询用到的参数

查询按钮调用的方法为queryData,createParam是form表单中的数据

function queryData() {
        var param = createParam($("#dForm"));
        $('#grid').datagrid({
            url: "CheckData.ashx?action=query&id=day",
            queryParams: param
        });
 }

坑2:queryParams总是为空

queryParams是object类型,虽然表现为{ },类似于json,但是切不可用json字符串代替,若上述的方法中queryParams的数据param为json字符串,那么后台将不能获取。

function createParam(form) {
    var query = form.serializeArray();
    query = convertArray(query);
    //    return JSON.stringify(query);
    return query;
}

function convertArray(o) {
    var v = {};
    for (var i in o) {
        if (o[i].name != '__VIEWSTATE') {
            if (typeof (v[o[i].name]) == 'undefined')
                v[o[i].name] = o[i].value;
            else
                v[o[i].name] += "," + o[i].value;
        }
    }
    return v;
}

上述方法将表单数据序列化为json,我调用createParam方法将表单数据封装成json类型,处理后作为queryParams参数传送,可是传到后台总为空,经多次测试,js的数据就是queryParams应该有的传输形式,后来注意到queryParams虽表现为json形式,但实质上是object,于是我将JSON.stringify(query)注释掉,返回的不再是json字符串,结果就对了。


0 0
原创粉丝点击