关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义

somezy 2015-01-31 10:10:40
求救各位大侠,今天在使用easyui的datagrid控件加载数据的过程报错如下:
Microsoft JScript 运行时错误: 无法获取属性“length”的值: 对象为 null 或未定义


我在js中生成的datagrid代码如下:
function createDatagrid() {
$('#divcasebox').datagrid({
height: 400,
url: 'url',
method: 'POST',
queryParams: { id: 'INSTANCE_ID' },
idField: '办文号',
striped: true,
resizeHandle: 'both',
fitColumns: false,
autoRowHeight: true,
singleSelect: false,
rownumbers: true,
pagination: true,
nowrap: false,
checkOnSelect: true,
selectOnCheck: true,
pageSize: 10,
pageList: [10, 20, 50, 100, 150, 200],
showHeader: true,
showFooter: true,
scrollbarSize: 18,
sortOrder: 'asc',
multiSort: true,
columns: [[
{ field: 'INSTANCE_ID', title: '办文号', width: 150, halign: 'center', align: 'left' },
{ field: 'BUSINESS_NAME', title: '业务名称', width: 200, halign: 'center', align: 'left' },
{ field: 'INSTANCE_STATUS', title: '办文节点状态', width: 200, halign: 'center', align: 'left' },
{ field: 'JBR', title: '经办人', width: 150, halign: 'center', align: 'left' },
{ field: 'DO_DATE', title: '经办日期', width: 150, halign: 'center', align: 'left' },
{ field: 'EXPIRE_DATE', title: '过期日期', width: 150, halign: 'center', align: 'left' },
{ field: 'CREATOR', title: '创建人', width: 150, halign: 'center', align: 'left' },
{ field: 'CREATE_DATE', title: '创建日期', width: 150, halign: 'center', align: 'left' },
{ field: 'DELETOR', title: '删除人', width: 150, halign: 'center', align: 'left' },
{ field: 'DELETE_DATE', title: '删除日期', width: 150, halign: 'center', align: 'left' },
{ field: 'CURRENTDO_USER_ID', title: '当前经办用户编号', width: 150, halign: 'center', align: 'left' },
{ field: 'EXCHANGE_ID', title: '业务当前流转编号', width: 150, halign: 'center', align: 'left',
editor: {
type: 'numberbox',
options: {
min: 0,
precision: 0
}
}
}
]],
onBeforeLoad: function (param) {
},
onLoadSuccess: function (data) {

},
onLoadError: function () {

},
onClickCell: function (rowIndex, field, value) {

}
});
}


我的js函数如下:
function CaseBoxLoadData() {
$.ajax({
type: "Post",
url: "GXOAServer.asmx/TodoBoxLoadData",
//async: false, //true:异步,false:同步
data: { },
//contentType: false,
//processData: false,
success: function (data) {
$("#divcasebox").datagrid("loadData",eval(data));
alert(data.text);
},
error: function (err) {
alert("error");
}
});
}


而我在js函数中获取到的json字符串如下:
{"total":2,"rows":[{"INSTANCE_ID":"BI00000011","BUSINESS_NAME":"专项检查文档资料报送","INSTANCE_STATUS":"hello正在办文处理中","JBR":"hello","DO_DATE":"2015/1/31 20:15:36","EXPIRE_DATE":"2015/2/1 20:15:36","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:15:36","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000033"},{"INSTANCE_ID":"BI00000012","BUSINESS_NAME":"专项检查文档资料报送","INSTANCE_STATUS":"hello正在办文处理中","JBR":"hello","DO_DATE":"2015/1/31 20:59:59","EXPIRE_DATE":"2015/2/1 20:59:59","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:59:59","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000034"}]}

我在网上找了好久,网上也有出现我的这种情况,但是按照他们的做法,还是没能解决我的问题,依然在报同样的错误,希望各位大侠能够帮我解决这个问题,小弟不胜感激。
...全文
13577 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pillower 2017-08-25
  • 打赏
  • 举报
回复
xml格式的数据应该怎么处理啊?
ToHolst 2016-09-29
  • 打赏
  • 举报
回复
相当不错11111
mmagical 2016-01-04
  • 打赏
  • 举报
回复
非常感谢,解决了我的大问题。。。虽然我xml格式的数据。。
yaganblw 2015-08-24
  • 打赏
  • 举报
回复
嗯,感谢楼主的分享,问题还是出在eval(data)这里。
十八道胡同 2015-02-01
  • 打赏
  • 举报
回复
你的rows 是 ==null吗?
  • 打赏
  • 举报
回复
设置断点,调试你的 eval(data)) 是什么值。或者在你的 http 调试器上查看服务器返回值。 另外,引用外部 js 文件时,尽量使用未混淆、未压缩的 js 文件。你如果一点都不看人家的源代码,怎么能调试好自己的程序呢?
somezy 2015-02-01
  • 打赏
  • 举报
回复
引用 1 楼 u010032648 的回复:
你这个没有错啊,我运行了次,数据出来了啊 代码 <script type="text/ecmascript"> $(function () { createDatagrid(); }); function createDatagrid() { $('#divcasebox').datagrid({ height: 400, method: 'POST', queryParams: { id: 'INSTANCE_ID' }, idField: '办文号', striped: true, resizeHandle: 'both', fitColumns: false, autoRowHeight: true, singleSelect: false, rownumbers: true, pagination: true, nowrap: false, checkOnSelect: true, selectOnCheck: true, pageSize: 10, pageList: [10, 20, 50, 100, 150, 200], showHeader: true, showFooter: true, scrollbarSize: 18, sortOrder: 'asc', multiSort: true, columns: [[ { field: 'INSTANCE_ID', title: '办文号', width: 150, halign: 'center', align: 'left' }, { field: 'BUSINESS_NAME', title: '业务名称', width: 200, halign: 'center', align: 'left' }, { field: 'INSTANCE_STATUS', title: '办文节点状态', width: 200, halign: 'center', align: 'left' }, { field: 'JBR', title: '经办人', width: 150, halign: 'center', align: 'left' }, { field: 'DO_DATE', title: '经办日期', width: 150, halign: 'center', align: 'left' }, { field: 'EXPIRE_DATE', title: '过期日期', width: 150, halign: 'center', align: 'left' }, { field: 'CREATOR', title: '创建人', width: 150, halign: 'center', align: 'left' }, { field: 'CREATE_DATE', title: '创建日期', width: 150, halign: 'center', align: 'left' }, { field: 'DELETOR', title: '删除人', width: 150, halign: 'center', align: 'left' }, { field: 'DELETE_DATE', title: '删除日期', width: 150, halign: 'center', align: 'left' }, { field: 'CURRENTDO_USER_ID', title: '当前经办用户编号', width: 150, halign: 'center', align: 'left' }, { field: 'EXCHANGE_ID', title: '业务当前流转编号', width: 150, halign: 'center', align: 'left', editor: { type: 'numberbox', options: { min: 0, precision: 0 } } } ]], onBeforeLoad: function (param) { }, onLoadSuccess: function (data) { }, onLoadError: function () { }, onClickCell: function (rowIndex, field, value) { } }); } function CaseBoxLoadData() { data={ "total": 2, "rows": [{ "INSTANCE_ID": "BI00000011", "BUSINESS_NAME": "专项检查文档资料报送", "INSTANCE_STATUS": "hello正在办文处理中", "JBR": "hello", "DO_DATE": "2015/1/31 20:15:36", "EXPIRE_DATE": "2015/2/1 20:15:36", "CREATOR": "hello", "CREATE_DATE": "2015/1/31 20:15:36", "DELETOR": "", "DELETE_DATE": "", "CURRENTDO_USER_ID": "UE000235", "EXCHANGE_ID": "BI00000033" }, { "INSTANCE_ID": "BI00000012", "BUSINESS_NAME": "专项检查文档资料报送", "INSTANCE_STATUS": "hello正在办文处理中", "JBR": "hello", "DO_DATE": "2015/1/31 20:59:59", "EXPIRE_DATE": "2015/2/1 20:59:59", "CREATOR": "hello", "CREATE_DATE": "2015/1/31 20:59:59", "DELETOR": "", "DELETE_DATE": "", "CURRENTDO_USER_ID": "UE000235", "EXCHANGE_ID": "BI00000034" }] }; $("#divcasebox").datagrid("loadData", eval(data)); } </script> <table id="divcasebox"></table> <input type="button" onclick="CaseBoxLoadData()" value="eeeee"/>
我按照你说的,把url删掉,运行还是报错,这个是怎么回事?你有QQ吗,可以帮我看看不?
u010032648 2015-02-01
  • 打赏
  • 举报
回复
我只是把url去掉了,因为我那没有那个路径
u010032648 2015-02-01
  • 打赏
  • 举报
回复
你这个没有错啊,我运行了次,数据出来了啊


代码
<script type="text/ecmascript">
$(function () {
createDatagrid();
});
function createDatagrid() {
$('#divcasebox').datagrid({
height: 400,
method: 'POST',
queryParams: { id: 'INSTANCE_ID' },
idField: '办文号',
striped: true,
resizeHandle: 'both',
fitColumns: false,
autoRowHeight: true,
singleSelect: false,
rownumbers: true,
pagination: true,
nowrap: false,
checkOnSelect: true,
selectOnCheck: true,
pageSize: 10,
pageList: [10, 20, 50, 100, 150, 200],
showHeader: true,
showFooter: true,
scrollbarSize: 18,
sortOrder: 'asc',
multiSort: true,
columns: [[
{ field: 'INSTANCE_ID', title: '办文号', width: 150, halign: 'center', align: 'left' },
{ field: 'BUSINESS_NAME', title: '业务名称', width: 200, halign: 'center', align: 'left' },
{ field: 'INSTANCE_STATUS', title: '办文节点状态', width: 200, halign: 'center', align: 'left' },
{ field: 'JBR', title: '经办人', width: 150, halign: 'center', align: 'left' },
{ field: 'DO_DATE', title: '经办日期', width: 150, halign: 'center', align: 'left' },
{ field: 'EXPIRE_DATE', title: '过期日期', width: 150, halign: 'center', align: 'left' },
{ field: 'CREATOR', title: '创建人', width: 150, halign: 'center', align: 'left' },
{ field: 'CREATE_DATE', title: '创建日期', width: 150, halign: 'center', align: 'left' },
{ field: 'DELETOR', title: '删除人', width: 150, halign: 'center', align: 'left' },
{ field: 'DELETE_DATE', title: '删除日期', width: 150, halign: 'center', align: 'left' },
{ field: 'CURRENTDO_USER_ID', title: '当前经办用户编号', width: 150, halign: 'center', align: 'left' },
{
field: 'EXCHANGE_ID', title: '业务当前流转编号', width: 150, halign: 'center', align: 'left',
editor: {
type: 'numberbox',
options: {
min: 0,
precision: 0
}
}
}
]],
onBeforeLoad: function (param) {
},
onLoadSuccess: function (data) {

},
onLoadError: function () {

},
onClickCell: function (rowIndex, field, value) {

}
});
}
function CaseBoxLoadData() {
data={ "total": 2,
"rows": [{
"INSTANCE_ID": "BI00000011", "BUSINESS_NAME": "专项检查文档资料报送",
"INSTANCE_STATUS": "hello正在办文处理中",
"JBR": "hello", "DO_DATE": "2015/1/31 20:15:36",
"EXPIRE_DATE": "2015/2/1 20:15:36", "CREATOR": "hello",
"CREATE_DATE": "2015/1/31 20:15:36", "DELETOR": "", "DELETE_DATE": "",
"CURRENTDO_USER_ID": "UE000235", "EXCHANGE_ID": "BI00000033" },
{ "INSTANCE_ID": "BI00000012", "BUSINESS_NAME": "专项检查文档资料报送",
"INSTANCE_STATUS": "hello正在办文处理中", "JBR": "hello", "DO_DATE":
"2015/1/31 20:59:59", "EXPIRE_DATE": "2015/2/1 20:59:59", "CREATOR":
"hello", "CREATE_DATE": "2015/1/31 20:59:59", "DELETOR": "", "DELETE_DATE": "",
"CURRENTDO_USER_ID": "UE000235", "EXCHANGE_ID": "BI00000034" }] };
$("#divcasebox").datagrid("loadData", eval(data));
}
</script>
<table id="divcasebox"></table>
<input type="button" onclick="CaseBoxLoadData()" value="eeeee"/>
somezy 2015-02-01
  • 打赏
  • 举报
回复
结贴说明: 很感谢sp1234等人的热心帮忙和提醒,现在我主要说明下问题所在: 首先我在独立的js文件中,直接把测试数据loaddata进去datagrid是没有问题的。 var kk = {"total":2,"rows":[{"INSTANCE_ID":"BI00000011","BUSINESS_NAME":"专项检查文档资料报送","INSTANCE_STATUS":"hello正在办文处理中","JBR":"hello","DO_DATE":"2015/1/31 20:15:36","EXPIRE_DATE":"2015/2/1 20:15:36","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:15:36","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000033"},{"INSTANCE_ID":"BI00000012","BUSINESS_NAME":"专项检查文档资料报送","INSTANCE_STATUS":"hello正在办文处理中","JBR":"hello","DO_DATE":"2015/1/31 20:59:59","EXPIRE_DATE":"2015/2/1 20:59:59","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:59:59","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000034"}]} $("#divcasebox").datagrid("loadData", eval(kk)); 在独立页面处理上面过程是不会报错的,但是经过后台调用传过来data后,就报错了,经过上网查询,发现问题所在就是后台传过来的是字符串,而不是json对象,也即是说对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,那就以字符串方式接受,那么需要做一次对象化处理,即将字符串放在eval()中执行一次。但是这里又引发了另外一个问题:字符串直接用eval(string)是报错的,直接报错说缺少“;”。这个就是eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式,因此要使用var dataObj=eval("("+data+")")这样才能转换成json对象,为什么这里要加上圆括号呢?是因为加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。 所以,问题到此已经弄明白了,就是格式的问题,由于考虑到用eval()效率不高,而且在个别浏览器中会报错,所以本次我采用的字符串转换json的方法使用JSON.parse(string)。所以最后我的加载数据的函数如下:
function CaseBoxLoadData() {
    $.ajax({
        type: "Post",
        url: "GXOAServer.asmx/TodoBoxLoadData",
        //async: false, //true:异步,false:同步 
        data: {},
        //contentType: false,
        //processData: false,
        success: function (data) {
            var jsondata = JSON.parse(data.text);
            $("#divcasebox").datagrid("loadData", jsondata);
        },
        error: function (err) {
            alert("error");
        }
    });
somezy 2015-02-01
  • 打赏
  • 举报
回复
引用 5 楼 LCL_data 的回复:
你的rows 是 ==null吗?
我的rows的值是正常的,不是空的。不过感谢你的回答,我已经找到问题所在了,稍后请查看结贴说明,谢谢!
somezy 2015-02-01
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
设置断点,调试你的 eval(data)) 是什么值。或者在你的 http 调试器上查看服务器返回值。 另外,引用外部 js 文件时,尽量使用未混淆、未压缩的 js 文件。你如果一点都不看人家的源代码,怎么能调试好自己的程序呢?
data传进去的就是我上面贴出来的测试数据源。不过很感谢您的提醒,我经过排查,已经找到问题所在了,稍后请看结贴说明!
  • 打赏
  • 举报
回复
引用 5 楼 LCL_data 的回复:
你的rows 是 ==null吗?
它的 data.text 里包括 rows,但是data是什么类型的对象就很难说了。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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