【问题标题】:How to append REST call JSON response to jQuery datatables?如何将 REST 调用 JSON 响应附加到 jQuery 数据表?
【发布时间】:2012-03-23 17:01:16
【问题描述】:

我正在尝试在 jQuery datatables 中显示 REST 调用 JSON 响应。

以下是我收到的 JSON 响应。

{
    "artifact": [
        {
            "artifactId": "I8cc4a96ef69a11e08b448cf533780ea2",
            "batchId": "15581",
            "processId": "115458787"
        },
        {
            "artifactId": "e08b448cf533780ea2I8cc4a96ef69a11",
            "batchId": "14962",
            "processId": "787974254"
        }
    ]
}

脚本:

<script type="text/javascript">
        $(document).ready(function () {
            $("#artifacts").dataTable({
                "sPaginationType": "full_numbers",
                "bJQueryUI": true
            });
        });
        function submitForm()
        {
            $.getJSON('http://myurl.com/JerseySample/rest/search', function(data) {
                $.each(data.artifact, function(i,artifact){
                        $('#artifacts').datatable().fnAddData([
                                artifact.artifactId,
                                artifact.batchId,
                                artifact.processId ]
                                );
                });
             });
        }
</script>

HTML:

<form class="searchform">
        <input class="searchfield" type="text" /> 
        <input class="searchbutton" type="button" value="Go" id="go" onclick="submitForm()" /> 

</form>
    <div id="container">
        <div id="demo_jui">
            <table id="artifacts" class="display">
                    <thead>
                            <tr>
                                <th>Artifact Id</th>
                                <th>Batch Id</th>
                                <th>Legacy Id</th>
                            </tr>
                    </thead>
                    <tbody>
                    </tbody>
            </table>
        </div>
    </div>

有人可以回答为什么我无法将 JSON 响应加载到数据表中吗?有没有更好的方法来获得这个功能?

【问题讨论】:

    标签: jquery jquery-plugins datatables


    【解决方案1】:

    你做的每件事都是正确的,你只是犯了一个菜鸟错误,很容易错过。

    当你这样做时

    $("#artifacts").dataTable();
    

    您正在创建一个新的数据表实例。 Datatables 在该调用中返回对象实例(带有 API 函数),但您不会将该实例存储在任何地方,因此,您会丢失对刚刚创建的数据表的所有引用。

    要解决这个问题,只需像这样添加对您创建的数据表的引用

    var thisTable = $("#artifacts").dataTable(
        {
            "sPaginationType": "full_numbers",
            "bJQueryUI": true
        }
    );
    

    然后在你的每个函数中引用它

    $.each(data.artifact, function(i,artifact){
        thisTable.fnAddData(
            [
                artifact.artifactId,
                artifact.batchId,
                artifact.processId 
            ]
        );
     });
    

    这是一个JSFiddle example 来查看它的实际应用。

    datatables.net 上的 dynamically add new row 示例相当糟糕,因为它执行内联 API 调用而无需添加引用。在multi filtering 上的以下示例中更好地演示了这一点。

    您也可以在他们的API documentation 上阅读有关它的信息。
    提示:它在$ 下的第一行中进行了演示

    【讨论】:

    • 感谢 ShadowScripter!有效。我在文档中阅读了更多内容,并将服务器端 json 响应用于数据表。但是分页/排序/搜索仍然是一个问题。 (猜想,这一定是因为 sEcho 的事情。)是否有任何类似于用于 REST xml 响应的数据表的东西——具有分页/搜索功能?非常感谢!感谢您的帮助!
    • @Ajay 分页/排序/搜索应该没有问题。如果您查看我的示例,请添加超过 10 行并尝试排序。它完全按照应有的方式工作。就该问题提出一个新问题。此外,如果您打算自己做所有事情,包括排序/分页/搜索,您应该只使用bServerside。在这种情况下,您需要默认设置 bServerside false 。
    • 谢谢!我针对 xml 响应提出了一个单独的问题。 Question
    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多