Javascript JQuery表为数据源中的每个有效JSON对象插入空行
我想做什么?我创建了一个覆盖,其中包含一个搜索字段和一个HTMLDataTable。用户将输入搜索参数,客户端将通过对服务器的AJAX调用请求数据。所有数据都通过AJAX正确返回。然后,我将AJAX转换为JSON,并在此覆盖中销毁/重建结果表 什么不起作用?我执行搜索,并已验证是否返回了序列化代码字符串。parse正确地将返回的字符串转换为一系列JSON对象。以下是原始返回数据,其中敏感详细信息替换为临时值:Javascript JQuery表为数据源中的每个有效JSON对象插入空行,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我想做什么?我创建了一个覆盖,其中包含一个搜索字段和一个HTMLDataTable。用户将输入搜索参数,客户端将通过对服务器的AJAX调用请求数据。所有数据都通过AJAX正确返回。然后,我将AJAX转换为JSON,并在此覆盖中销毁/重建结果表 什么不起作用?我执行搜索,并已验证是否返回了序列化代码字符串。parse正确地将返回的字符串转换为一系列JSON对象。以下是原始返回数据,其中敏感详细信息替换为临时值: [{"id":5555,"nameLastFirst":"Shmoe, Joe","r
[{"id":5555,"nameLastFirst":"Shmoe, Joe","role":"owner"},
{"id":33333,"nameLastFirst":"Doe, Jane","role":"stakeholders"}]
这当然变成了两个对象,应该在我编写的结果表中正确填充两行。但是,我收到以下错误:
DataTables警告表id=myTable:从数据源为行0请求了未知参数“0”
错误发生后,我可以关闭浏览器警报,结果是HTML中出现一组空行
DataTable等于我的JSON数组中的对象数
现在,我想指出的是,我在谷歌上搜索了那个错误,并收到了大量导致那个错误的独特原因。我跟踪了搜索结果中可能找到的所有内容,但没有一个修复程序起作用,许多修复程序甚至不适用于我的情况。这就是我来这里的原因
以下是我的jquery代码userSearchResults是AJAX字符串:
$.fn.renderTable = function () {
var parsedUsers = JSON.parse(userSearchResults);
$("#userSearchResultsTable").dataTable({
"bDestroy": true,
"bPaginate": true,
"bFilter": false,
dataType: "json",
"bProcessing": true,
"oLanguage": {"sEmptyTable": "There were no results given. Please try again with different search parameters."},
"aaData": parsedUsers,
"aocolumns": [
{
"mdataProp": "id",
"sTitle": "ID",
"sType" : "numeric",
},
{
"mdataProp": "nameLastFirst",
"sTitle": "Name",
"sType": "string",
},
{
"mdataProp": "role",
"sTitle": "User Role",
}
]
});
};
最后,这里是关于页面加载的表。我将其作为占位符,当用户搜索结果时将其销毁和重建:
<table id="userSearchResultsTable" style="width: 100%;">
<thead><tr role="row">
<th class="sorting_asc" tabindex="0" rowspan="1" colspan="1" aria-sort="ascending"
aria-label="ID: Activate to sort column descending.">ID</th>
<th class="sorting_asc" tabindex="1" rowspan="1" colspan="1" aria-
sort="ascending" aria-label="Name: Activate to sort column descending.">Name</th>
<th class="sorting_asc" tabindex="2" rowspan="1" colspan="1" aria-sort="ascending"
aria-label="User Role: Activate to sort column descending.">User Role</th>
</tr></thead>
<tbody role="alert" aria-live="polite" aria-relevant="all"></tbody>
</table>
非常感谢您的帮助。试着做一些测试
$.fn.renderTable = function () {
var parsedUsers = JSON.parse(userSearchResults);
$("#userSearchResultsTable").dataTable({
"bDestroy": true,
"bPaginate": true,
"bFilter": false,
"bProcessing": true,
"oLanguage": {"sEmptyTable": "There were no results given. Please try again with different search parameters."},
"aaData": parsedUsers,
"aocolumns": [
{
"mdata": "id",
},
{
"mdata": "nameLastFirst",
},
{
"mdata": "role",
}]
});
};
我曾经使用过datatables,并且认为我们今天就可以解决它。这个问题原来是在页面加载时创建的数据表带有一组特定的列;说A、B、C和D列 但是,当AJAX返回数据并将数据传递到$.DataTable构建函数时,我会销毁现有表并重新构建它。但是,它仍然需要相同的列。我本想让这些列完全相同,但在某个地方犯了一个错误
最终,它是用类似于A、B、C、E的东西重建表,其中E应该是D。我已经尝试了所有我能找到的方法来找出这个问题的原因,我担心这与插入的给出datatable列标题的行有关。不过,我不知道还有其他选择。您在哪里调用$.fn.renderTable函数?此处显示$.fn.renderTable:$document.readyfunction{$searchButton.clickfunction{$.fn.loadUsers;$.fn.renderTable;};谢谢你的快速回复!我刚刚插入了你修改过的代码,但不幸的是我收到了同样的错误,同样的措辞和数字。另外,行是空的,但是每个JSON对象都有一行,就像以前一样。我现在要回家了,之后我会为你调试它。我在家里有一个数据表项目。在过去,我确实经常这样做。胡格西。在再次搜索结果之前,我保存了更改、构建了代码并刷新了页面。我还验证了javascript库是通过googlechrome的devtools源代码选项更新的。