easyui datagrid 绑定从后台得到的复杂的特殊数据结构
由于项目需要,从后台得到的数据统一为了类似{state:xxx,data:xxx,message:xxx}类型
但是easyui datagrid却只认{total:xxx,rows:xxx}。。。所以,整个前台都报错了,报错了就要解决,解决的过程中一共试过3中方式
1,datagrid不直接指定数据源,而是单独的ajax得到数据,然后在loadData绑进去,但是这样太麻烦了,不合理,显然不适用
2,重写ajax在得到数据的时候处理一下,网上找了段大神的代码就拿来用了,但是这样写灵活性不好,只能适用部分验证功能
(function ($) { var _ajax = $.ajax; $.ajax = function (opt) { var fn = { error: function (XMLHttpRequest, textStatus, errorThrown) { }, success: function (data, textStatus) { } } if (opt.error) { fn.error = opt.error; } if (opt.success) { fn.success = opt.success; } var _opt = $.extend(opt, { error: function (XMLHttpRequest, textStatus, errorThrown) { fn.error(XMLHttpRequest, textStatus, errorThrown); }, success: function (data, textStatus, xhr) { fn.success(data.data, textStatus); } }); _ajax(_opt); }; })(jQuery);
3,直接用easyui的数据表格属性loadFilter。。。。。(尼玛,折腾了2个小时才发现easyui自己就有数据过滤功能。。。。坑爹啊)
<script type="text/javascript"> $(function () { $('#dgUser').datagrid({ url: 'index.ashx', columns: [[ { title: 'UserID', field: 'UserID', width: 100, align: 'center' }, { title: 'UserName', field: 'UserName', width: 100, align: 'center' } ]], loadFilter: function (data) { return data.data; } }); }); </script>