【发布时间】:2017-07-11 23:47:51
【问题描述】:
为了练习,我正在尝试将 JSOn 数据显示到我的 aspx 网页中的数据表中,但该数据表被 processing 这个词卡住了。结果当我检查控制台时,错误是 Cannot read property 'length' of undefined
这个错误是什么意思?我如何解决它?这个错误是因为我的方法错误吗?
我所做的是,首先我创建了一个 .aspx.cs 文件,该文件在调用 URL 时生成 JSON 字符串:
[{"NickName":"Bob","LogIN":"6/7/1846 12:00:00 AM","LogOUT":"6/7/1846 12:00:00 AM"},{"NickName":"Bob","LogIN":"6/6/1846 12:00:00 AM","LogOUT":"6/6/1846 12:00:00 AM"},{"NickName":"Patrick","LogIN":"6/7/1846 12:00:00 AM","LogOUT":"6/7/1846 12:00:00 AM"},{"NickName":"Ward","LogIN":"6/7/1846 12:00:00 AM","LogOUT":"6/7/1846 12:00:00 AM"},{"NickName":"Ward","LogIN":"6/6/1846 12:00:00 AM","LogOUT":"6/6/1846 12:00:00 AM"},{"NickName":"Ward","LogIN":"6/5/1846 12:00:00 AM","LogOUT":"6/5/1846 12:00:00 AM"},{"NickName":"Krabs","LogIN":"","LogOUT":""},{"NickName":"Sandy","LogIN":"","LogOUT":""},{"NickName":"Pearl","LogIN":"","LogOUT":""}]
然后在我应该显示数据表的 .aspx 文件上, 我写了这个脚本,这是dataTables site 上的建议:
/*using the ajax function*/
var tbl = $('#datatableJSONEx').DataTable({
processing: true,
serverSide: true,
info: true,
ajax: "DefaultJSONResult?THEstr=produceJSON",
order: [[0, 'desc']],
select: true,
responsive: true,
buttons: true,
length: 10
});
然后我在 HTML 中添加了它的表示:
<div>
<table id="datatableJSONEx" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>NickName</th>
<th>LogIN</th>
<th>LogOUT</th>
</tr>
</thead>
<tfoot>
<tr>
<th>NickName</th>
<th>LogIN</th>
<th>LogOUT</th>
</tr>
</tfoot>
</table>
</div>
</div>
是什么导致了错误?解决错误后,如果我希望我的表在服务器发生更改时自动更新,这种方法是否正确?
编辑
我在我的 dataTables jQuery 中更改了这个属性:
ajax: "DefaultJSONResult?THEstr=produceJSON"
进入
ajax: $.ajax("DefaultJSONResult?THEstr=produceJSON")
但是,它仍然显示正在处理中......当我在谷歌浏览器中检查元素时,我在控制台上看不到任何东西。
更新
我将 jQuery 更改为让 $.ajax() 将我的 url 转换为对象,然后将其传递给数据表的 ajax: 属性:
var jqxhr = $.ajax("DefaultJSONResult?THEstr=ProduceJSON",
{
success: function (data, status, xhr) { //on success
$('p').append(status);
},
error: function (jqXhr, textStatus, errorMessage) { //the action was a failure, know why.
$('p').append('ERROR: ' + errorMessage);
}
});
/*using the ajax function*/
var tbl = $('#datatableJSONEx').DataTable({
processing: true,
serverSide: true,
info: true,
ajax: jqxhr,
sAjaxDataProp : "",
columns: [
{ data: 'NickName'},
{ data: 'TimeIN' },
{ data: 'TimeOUT' }
],
order: [[0, 'desc']],
select: true,
responsive: true,
buttons: true,
length: 10
});
元素 p 现在返回 SUCCESS 并且控制台显示没有错误。但是数据表仍然没有返回任何内容...... JSON 字符串是返回原因的 .aspx url 吗?如何让 Jquery Datatables 接受我的格式?正确的格式是什么?
【问题讨论】:
-
你有模型,我的意思是 C# 中与数据表列相关的类吗?
-
数据表需要
array of objects,所以你必须发送array of objects而不是json string -
我明白了,system.datatable 算作对象数组吗?
-
为了从 dbase 获取数据,我使用了 (System.Data.SQLClient),然后将其作为 JSON 字符串输出,我使用了 Newtonsoft.Json。
-
No
json string不会填充您在C#中将其转换为list of objects并发送list的表格。
标签: javascript c# jquery asp.net json