easyui 的 datagrid 表格在返回数据为空时,页面空白,表格头部以及toolbar不显示

Joe_vv 2015-08-28 05:48:38
easyui 的 datagrid 表格在返回数据为空时,页面空白,表格头部以及toolbar不显示


js代码如下:


<table id="experlist"></table>
<script type="text/javascript">
$(function() {
$('#experlist').datagrid({
border:false,
fit:true,
fitColumns:true,
pageSize: 20,
pageList: [20,30,40,50],
nowrap:false,
collapsible:false,
url:'__URL__/vbox_show/',
loadMsg:'数据处理中......',
sortName:'id',
sortOrder:'desc',
remoteSort:false,
frozenColumns:[[
{field:'ck',checkbox:true}
]],
columns:[[
{title:'编号',field:'id',width:fixWidth(0.05),align:'center',sortable:true,
sorter:function(a,b){
return (a>b?1:-1);
},
formatter:function(value,rec) {
return '#'+ value;
}
},
{title:'隶属练习',field:'title',width:fixWidth(0.1),align:'center',
formatter:function(value) {
data = '<span class="tl">'+ value +'</span>';
return data;
}
},
{title:'隶属用户',field:'username',width:fixWidth(0.1),align:'center',sortable:true,},
{title:'母机信息',field:'server',width:fixWidth(0.2),align:'center',
formatter:function(value,rec) {
os = (rec['state'][rec['server_name']]['os']==undefined) ? '' : '<br>操作系统:'+rec['state'][rec['server_name']]['os'];
since = (rec['state'][rec['server_name']]['since']==undefined) ? '' : '<br>系统快照:'+rec['state'][rec['server_name']]['since'];
data = '<span class="tl" style="line-height:20px;">名称:'+ rec['server_name'] +' 端口:'+ rec['server_port']+os+since+'</span>';
return data;
}
},
{title:'客户机信息',field:'client',width:fixWidth(0.2),align:'center',
formatter:function(value,rec) {
os = (rec['state'][rec['client_name']]['os']==undefined) ? '' : '<br>操作系统:'+rec['state'][rec['client_name']]['os'];
since = (rec['state'][rec['client_name']]['since']==undefined) ? '' : '<br>系统快照:'+rec['state'][rec['client_name']]['since'];
data = '<span class="tl" style="line-height:20px;">名称:'+ rec['client_name'] +' 端口:'+ rec['client_port']+os+since+'</span>';
return data;
}
},
{title:'虚拟机状态',field:'status',width:fixWidth(0.15),align:'center',
formatter:function(value,rec) {
if(rec['state'][rec['server_name']]['state']=='running') {
vrde_conn = (rec['state'][rec['server_name']]['vrde_conn']=='active') ? '<span class="cl">已连接</span>' : '未使用';
server_data = '<span class="cl">运行中 </span> ('+vrde_conn+') <a onclick=exper_stop('+rec['id']+',"'+rec['server_name']+'")><span class="co">关机</span></a> <br>IP:'+rec['state'][rec['server_name']]['ip'];
} else {
server_data = '未启动 <a onclick=exper_start('+rec['id']+',"'+rec['server_name']+'")>启动</a>';
}
if(rec['state'][rec['client_name']]['state']=='running') {
vrde_conn = (rec['state'][rec['client_name']]['vrde_conn']=='active') ? '<span class="cl">已连接</span>' : '未使用';
client_data = '<span class="cl">运行中</span> ('+vrde_conn+') <a onclick=exper_stop('+rec['id']+',"'+rec['client_name']+'")><span class="co">关机</span></a> <br>IP:'+rec['state'][rec['client_name']]['ip'];
} else {
client_data = '未启动 <a onclick=exper_start('+rec['id']+',"'+rec['client_name']+'")>启动</a>';
}
return '<span class="ch" style="line-height:20px;">母机'+server_data+'<br>客户机'+client_data+'</span>';
}
},

{title:'最后操作时间',field:'addtime',width:fixWidth(0.1),align:'center',sortable:true,
sorter:function(a,b){
return (a>b?1:-1);
}
},
{title:'操作',field:'act',width:fixWidth(0.1),align:'center',
formatter:function(value,rec) {
return '<a onclick="exper_del('+rec['id']+')">删除</a>';
}
},
]],
pagination:true,
rownumbers:true,
toolbar:[{
text:'全部实验机',
iconCls:'icon-mune',
handler:function() {
goTab('实验机管理','icon-zs','exper/vbox','exper');
}
},'-',{
text:'批量关机',
iconCls:'icon-dis',
handler:exper_stopall
},'-',{
text:'批量删除',
iconCls:'icon-del',
handler:exper_delall
}],
});
});


现在数据库中表为空,php返回数据:
echo '{"total":0,"rows":""}';

浏览器显示如图:


IE下如此,火狐和chrome都测试过了,也是这样,但是奇怪的时候在火狐下偶尔,大概5%以下的概率会正常,如图:



在有数据的情况下,显示正常,如图:



在线等,谢谢了
...全文
353 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joe_vv 2015-08-31
  • 打赏
  • 举报
回复
引用 2 楼 gukuitian 的回复:
你这返回的数据格式不对吧? 不应该是这样的么 {total:0; rows:[]}
数据格式没问题的,原因找到了。 这部分代码之前是另一个同事写的,这个页面和另一个页面的使用了同一个 id, 导致这两个页面不能同时打开,后打开的那个页面就会显示空白,真是操蛋。 借此机会提醒自己和大家,id 千万不要重用,写代码 复制粘贴是很快,一定要注意需要修改的地方。 越是复杂的现象,越是看起来不可思议的bug,往往越是由于一个简单而又直白的失误造成的,胆大心细,胆大心细,胆大心细,重要的事要说三遍。 加油~
gukuitian 2015-08-28
  • 打赏
  • 举报
回复
你这返回的数据格式不对吧? 不应该是这样的么 {total:0; rows:[]}
Joe_vv 2015-08-28
  • 打赏
  • 举报
回复
顶上去,顶上去
基于EasyUI 官方的帮助。 Application 使用easyUI创建一个CRUD的应用 使用easyUI创建一个CRUD DataGrid 使用easyUI展开行详细编辑form创建CRUD应用 使用jQuery easyUI 创建一个 RSS Feed阅读器 Drag and Drop easyUI 基础的拖动和放置 使用easyUI创建一个拖放的购物车 使用easyUI创建一个课程表 Menu and Button 使用easyUI创建简单的菜单 使用easyUI创建Link Button 使用easyUI创建Menu Button 使用easyUI创建Split Button Layout 使用easyUI创建一个border layout在你的web页面 使用easyUI在panel中创建复杂布局 使用easyUI创建折叠面板 使用easyUI创建Tabs标签 使用easyui创建tabs组件和动态添加 使用easyUI创建一个自动播放的tabs 使用easyUI创建XP风格左侧面板 DataGrid 使用easyUI转换HTML table到datagrid 使用easyUIdatagrid添加pagination 使用easyUI添加查询功能在datagrid 使用easyUI 添加toolbardatagrid 使用easyUI 创建复杂的toolbardatagrid 使用easyUIdatagrid冻结列 使用easyUI 动态改变datagrid的columns 使用easyUI 格式化datagrideasyUI 添加排序到datagrid easyUI 自定义排序datagrid easyUI 添加CheckBox选择到DataGrid easyUI自定义DataGrid分页栏 启用DataGrid行内编辑器 继承扩展DataGrid的editors easyUI在可编辑的datagrid中计算两列的值 easyUI合并DataGrid单元格 easyUIdatagrid创建自定义视图 easyUI datagrid显示摘要信息在页脚 easyUI 根据一些条件改变DataGrid 行背景颜色 easyUI 创建一个 Property Grid easyUI 展开DataGrid里面的行显示详细信息 easyUI 在主datagrid上创建子datagrid Window easyUI 我的第一个window easyUI 自定义window工具 easyUI window和布局 easyUI 创建Dialog对话框 easyUI Dialog自定义Toolbar和button Tree easyUI 从标记创建Tree easyUI 创建异步Tree easyUI 附加tree节点到tree easyUI 创建Tree和复选框Tree Node easyUI 拖动(Drag)和放置(Drop)Tree easyUI 加载parent/child节点到tree 转换tree标准格式数据 easyUI 创建一个基础的TreeGrid easyUI 创建复杂TreeGrid Form easyUI 通过ajax的方式提交Form easyUI 添加ComboTree 字段到一个 form easyui Form验证 easyUI 格式化ComboBox easyui 过滤ComboGrid 扩展 easyui DWR加载 easyUI 主题
2016-1-31 更新 1、使用时不再需要显示调用followCustomHandle方法,即可生效扩展属性。 2013-9-3 更新 1、$.showWindow 和 $.showModalDialog 在useiframe=true时,对窗体body增加遮罩控制。 2、easyui.tabs的add方法当useiframe=true时,增加遮罩控制。 3、toolbar增加url属性,可以通过请求后台数据构建。 4、增加mask(遮罩)扩展。 2013-8-26 更新 1、tree增加支持类标准数据格式加载,具体看demo或jquery.easyui.tree.extend.js文件开头说明。 2、修复datagrid在rowediting编辑风格时点击“确定”按钮无法提交问题。 3、datagrid和treegrid增加getEditingRows方法,用来获取所有正在编辑的行。 4、修复tabs.add方法,当useiframe=true时, iframe的高度改为100%。 5、修复当tabs使用iframe时,右键菜单刷新报错问题。 6、增加combotree对简单数据格式和类标准数据格式的加载,具体参考jquery.easyui.tree.extend.js文件开头说明。 7、修复datagrid.onConfirmEdit事件默认实现bug。 8、增加treegrid.onConfirmEdit事件。 2013-8-12 更新 1、修复combobox在级联操作时,传递的swd参数值为null,而不是选中值。 2、datagrid的addEventListener 方法增加对事件onExpandRow和onCollapseRow的控制。 3、tree增加自定义属性 attributes,用于简单数据加载时,指定那些字段当作node的attributes属性使用。 4、combobox增加 getSelected 方法, 返回选中item的data值。 5、combogrid增加 getSelected 方法,返回选中item的data值。 6、datagrid增加 getAllExpandRowIndex 方法,用于在detailView视图下获取当前页已展开行的索引。 7、datagrid增加 getExpandRowIndex 方法,用于在detailView视图下获取当前页第一个展开行的索引。 8、datagrid增加 fixDetailRowWidth 方法,用于detailView视图下修改rowDetial中组件宽度。 9、getAllExpandRowIndex、getExpandRowIndex、fixDetailRowWidth 这三个方法联合使用可解决detailView视图下列拖拽时显示错位问题。 10、修复datagrid 的rowEditing编辑风格在没有数据datagrid中增加数据后,再编辑时无法显示的问题。 11、datagrid增加自定义事件 onConfirmEdit , 用于rowEditing编辑风格点击“确定”按钮时触发。当事件返回false时终止endEdit方法调用。 2013-7-31 更新 1、$.showWindow、$.showModalDialog 这两个方法增加返回值,返回值指向当前弹出窗的引用。 2、移除根据$.browser.msie判断浏览器版本。 2013-7-18 更新 1、menu、datagrid、combo、combobox、panel、tabs、tree、treegrid 增加 addEventListener 方法。 2、修复menu、datagrid、combo、combobox、panel、tabs、tree、treegrid 因事件注册造成多次重复渲染的问题(包括多次请求后台数据)。 3、移除datagrid 的rowContextMenu菜单项默认事件替换功能。 4、删除datagrid rowContextMenu默认菜单中的增加、编辑、导出菜单项。

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧