解决方案 »
- 一个关于onmouseover出发function的问题
- 关于javascript的下面对象的写法
- 修改div的位置
- this的疑惑
- js简单实现多个div拖动效果
- 点击链接保存图片,换了firefox就不好用了.
- JavaScript JSON 求助
- 请问,页面onmousemove事件与flash的onmousemove事件产生冲突,如何解决(100分)。
- 为什么同一个中文字符串由表单递交的length值和直接赋值的length值不一样?
- 通过一组checkbox来控制按钮是否为disabled
- iframe中ajax轮询请求问题
- easyui datagrid能否实现动态表头 动态标题,如附图那样
你这个url(url: '../../HttpHandler/Jc_Storage.ashx?method=select')所返回的json应该至少要有rows属性
也就是说你返回的json至少是要这样的 {rows:[]} 格式
不介意的话最好能贴出你的返回数据的代码 也就是 HttpHandler/Jc_Storage.ashx?method=select 里的代码...
width: 660,
height: 600,
singleSelect: true,
collapsible: true,
idField: 'ODRD140_ORDERNO',
url: 'Handler.ashx',
loadMsg: '正在加载数据...',
columns: [[
{ field: 'ODRD140_ORDERNO', title: '序号', width: 150 },
{ field: 'ODRD140_ITEMQTY', title: '商品数量', width: 180, editor: 'text' },
{ field: 'ODRD140_STAT', title: '状态', width: 180, editor: 'text' } ]],
pagination: true,
rownumbers: true
});Handler.ashx的代码:
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
string json = "{\"total\":1,\"rows\":[{\"ODRD140_ORDERNO\":\"0001\",\"ODRD140_ITEMQTY\":\"100\",\"ODRD140_STAT\":\"已审核\"}]}";
context.Response.Write(json);
}
public bool IsReusable {
get {
return false;
}
}一直不停点击datagrid的刷新按钮,有时就报和LZ一样的错,求高手解决下啊~~
可是如果我在datagrid里加了个onLoadSuccess:function(data){} 就不出来了 你可以试下
具体我也不知道该怎么去解释 等回复吧还是...
谢谢~好的我去试试。
我发现在Handler.ashx 中最后添加代码:
context.Response.Flush();
基本也不会报错了~
在返回的JSON中加{total:row[]}格式,都是没有用的,于是在OnLoadSuccess:函数中尝试捕获data(JSON格式),正常时能捕获到,非正常的时候,不能捕获,
我的推断是这样的:因为收不到服务端的json数据导致填充grid失败,所以才会有null的错误,如果能够先于datagrid之前捕获服务端的数据,就好判断究竟是服务器端数据传输问题,还是datagrid在收到json后,处理json填充datagrid过程中出现问题。
这个问题不解决,easyui使用就比较麻烦。
1.服务器端送出Json数据到客户端-->
2.datagrid接收Json数据-->
3.Json数据填充到datagrid。
分别在三个阶段设立断点后,检查发现出现null错误时,1步骤是正常的,客户端能获取到Json数据,说明数据能到目的地,与服务器无关。但在datagrid方法loadfilter事件中,参数data此时是Null值,正常情况下,loadfilter是填充datagrid前最后一个方法(用于过滤处理),如若data是null,说明问题在datagrid接收Json数据异常,所以加载失败继而出现以上问题。
解决方法:既然这是个偶然发生的异常,但为了保证在IE 下100%的准确,先不要寻找datagrid内部问题,即便发现了,修改datagrid内核带来其他风险还是很大的,所以,我在loadFilter中增加判断,来避免问题发生:$.extend($.fn.datagrid.defaults, {
loadFilter: function (data) {
if (data == null) {
alert('读取有问题,重新填充');
data = $(this).datagrid("reload");
}
return data;
});
loadFilter: function (data) {
if (data == null) {
$(this).datagrid("load");
return $(this).datagrid("getData");
}
...//pager function
})
loadFilter: function (data) {
if (data == null) {
$("#").datagrid("load");
return false; // 我觉得这里不需要再去返回一个值
}
})
比较幸运的是我目前没有遇到这个问题,我的写法可能和诸位的有点小区别
//显示数据
$(function () {
BindEmpGrid();
}); function BindEmpGrid() {
$('#EmpListGrid').datagrid({
url: '../Ashx/DeptAjax.ashx?op=select',
singleSelect: true,
columns: [[
{ field: 'DeptGUID', title: '##', width: 100, align: 'center', sortable: true, hidden: true },
{ field: 'GUID', title: '#, width: 100, align: 'center', sortable: true, hidden: true },
{ field: 'DName', title: '*', sortable: true, width: 100, align: 'center' }
]]
});
} //新增
function newDept() {
title = "";
$("#dlgDept").dialog('open').dialog('setTitle', title);
$("#Deptfm").form('clear');
guids = "";
urlAddr = "../.../..Ajax.ashx?op=add";
} //编辑显示窗口
function editDept() {
var row = $("#EmpListGrid").datagrid('getSelected');
if (row) {
title = "";
$("#").dialog('open').dialog('setTitle', title);
$("#").form('clear');
$("#").form('load', row);
$('#').combogrid('grid').datagrid('reload');
var EUrl = '.././..Ajax.ashx?op=GetMaster&EGUID=' + ..;
} else {
$.messager.alert('提示', '请选择数据行进行编辑!');
}
} //删除
function Remove() {
var row = $("#EmpListGrid").datagrid('getSelected');
if (row) {
$.messager.confirm('Confirm', '您确定要删除该数据吗?', function (r) {
if (r) {
...
$.post('.././..Ajax.ashx?op=delete', { "objs": JSON.stringify(objs, function (k, v) { return v === "" ? "" : v }), "object": JSON.stringify(object, function (k, v) { return v === "" ? "" : v }) }, function (result) {
if (result.Success) {
$("#EmpListGrid").datagrid('reload');
} else {
$.messager.alert('提示', '操作失败!');
}
}, 'json');
}
});
} else {
$.messager.defaults = { ok: "确定", cancel: "取消" };
$.messager.alert('提示', '请选择数据行进行操作!');
}
} //保存
function saveDept() {
//获取编辑数据
if (.. == "") {
$.messager.alert('提示', '不能为空!');
return false;
}
else {
var row = $("#EmpListGrid").datagrid('getSelected');
if (row) {
DeptGUID = row.GUID;
}
$.post('../Ashx/DeptAjax.ashx?op=selectAll', function (result) {
if (!result.Success) {
$.messager.alert('提示', result.Message);
return false;
}
else {
var objs = {
...
};
var obj = {
...
};
if (title == "") {
$.post('../../.Ajax.ashx?op=AddMaster', { "obj": JSON.stringify(obj, function (k, v) { return v === "" ? "" : v }), "objs": JSON.stringify(objs, function (k, v) { return v === "" ? "" : v }) }, function (result) {
if (!result.Success) {
return false;
} else {
$("#").dialog('close');
$('#EmpListGrid').datagrid('reload');
}
}, 'json');
} else if (title == "") {
var object = {
...
};
$.post('../Ashx/DeptAjax.ashx?op=update', { "obj": JSON.stringify(obj, function (k, v) { return v === "" ? "" : v }), "objs": JSON.stringify(objs, function (k, v) { return v === "" ? "" : v }), "object": JSON.stringify(object, function (k, v) { return v === "" ? "" : v }) }, function (result) {
if (!result.Success) {
return false;
} else {
$("#dlgDept").dialog('close');
$('#EmpListGrid').datagrid('reload');
}
}, 'json');
}
}
}, 'json');
}
}大家参考参考!!!
SCRIPT5007: 无法获取未定义或 null 引用的属性“length” 火狐 chrome 等其他浏览器没有任何错误我更换服务器 测试在IIS 下 出现如上问题
apache下 一切正常 IE浏览也正常有可能是服务器编码哪里的问题
具体我也不知道 找不到根本原因
实在不行只有换服务器了
这个问题,我也不是很清楚,我不知道你的代码是什么样子的,大胆猜测有三个原因:第一个可能是偶发性,我解决不了,第二个就是你看看是不是加载的时候, $("#EmpListGrid").datagrid('reload'); 这段代码中的id在整个项目中是不是唯一的,如果不是唯一的,而且被预编译的话,就可能出现没有数据甚至是报错,第三个原因就是你所打开的页面或者是窗口在构造的时候到底是不是唯一的,这个你得自己来调试,如果不是唯一的就不会再你所看到的页面显示数据,可能是某个隐藏的页面了,关于是不是唯一的页面出现的原因有两个,一个是构造了多个,另一个是关闭该页面的时候木有销毁该页面,也就是说关闭的效果木有,该页面只是相当于隐藏了,当你在打开这个页面是就也不会显示数据
以上都是我分析的情况,可能不对,可能不符,大家在研究研究哈
正解,谢谢!
当页面刷新时,html很快就刷出来,而异步执行的方法还没返回数据,就会出现这样的问题。
url: "handlers/getXXLX.ashx",
method:"get",
fitColumns: true, //设置为true将自动使列适应表格宽度以防止出现水平滚动,false则自动匹配大小
loadMsg: "正在努力为您加载数据", //加载数据时向用户展示的语句
pagination: true, //显示最下端的分页工具栏
pageSize: 10, //读取分页条数,即向后台读取数据时传过去的值
pageList: [10, 20, 30], //可以调整每页显示的数据,即调整pageSize每次向后台请求数据时的数据
columns: [[
{ field: 'LineName', title: '线路名称', width: 100, sortable: true },
{ field: 'LineID', title: '线路编码', width: 100 },
{ field: 'IDPostName', title: 'Id位置名称', width: 100 }
]] });
$('#positionInfo').datagrid('reload');