Javascript JQuery表为数据源中的每个有效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

我想做什么?我创建了一个覆盖,其中包含一个搜索字段和一个HTMLDataTable。用户将输入搜索参数,客户端将通过对服务器的AJAX调用请求数据。所有数据都通过AJAX正确返回。然后,我将AJAX转换为JSON,并在此覆盖中销毁/重建结果表

什么不起作用?我执行搜索,并已验证是否返回了序列化代码字符串。parse正确地将返回的字符串转换为一系列JSON对象。以下是原始返回数据,其中敏感详细信息替换为临时值:

[{"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源代码选项更新的。