【问题标题】:Load part of JSON object to Datatable with AJAX使用 AJAX 将部分 JSON 对象加载到 Datatable
【发布时间】:2015-06-18 11:38:49
【问题描述】:

我有一个带有数据表的页面,我通过 AJAX 加载 JSON 对象来获取数据。这工作正常。 我想添加另一个数据表,并且为了不对两个不同的页面进行 AJAX 查询,我想将所有数据放入一个 JSON 对象中,并为每个数据表只提取一个嵌套对象。我根本无法让它工作。

第一个可以正常工作的场景: 我得到这个 JSON 字符串

{
    "data": [{ 
        "id": "8", 
        "organization_id": "1",
        "name": "Some name",
        "text": "Some text",
        "category": "0",
        "status": "0"
    }]
}

通过加载

<script>
    var json_output_page_path = '<?php echo $json_output_page_path; ?>';
</script>

在我的 Datatable JS 中,我像这样访问它

"ajax": json_output_page_path,
"columns": [
    { "data": "name" },
    { "data": "text" },
    { "data": "category" },
    { "data": "status" } 
],

如果我为每个对象嵌套原始 PHP 数组,那么我会得到这个 JSON 对象:

{
    "openprojects": {
        "data":[{
            "id": "8",
            "organization_id": "1",
            "name": "Some name",
            "text": "Some text",
            "category": "0",
            "status": "0"
        }]
    },
    "closedprojects": {
        "data": [{
            "id": "8",
            "organization_id": "1",
            "name": "Another name",
            "text":"Another text",
            "category":"0",
            "status":"0"
        }]
    }
}

我认为我可以使用“.”访问嵌套数组。表示法,但它不会将任何数据提取到数据表中。我认为这可能与在 Datatable 加载它之前不是 JSON 对象有关。 有什么办法解决这个问题?

谢谢。非常感谢您的帮助。


我解决了...有点:-) 我在这两个文档链接中找到了答案。 https://datatables.net/reference/option/ajax

https://datatables.net/reference/api/ajax.url()

问题的解决方法是:

`$('#example').dataTable({
    "ajax": {
        "url": "data.json", //where this is the link to the JSON source relative to the page where the HTML table is on.
        "dataSrc": "tableData" //Where this is the reference to the nested object
    }
});`

问题仍然存在,因为现在为每个表单独发出请求。 此外,我找到了这个答案,但你能帮我说说这是怎么做的吗? “我建议您使用 $.ajax() 自己调用 Ajax 来获取数据,然后使用 dataDT 选项或 rows.add()DT 方法将数据添加到表中。” https://datatables.net/forums/discussion/25309/reuse-ajax-source-for-multiple-tables-on-the-same-page

我不知道该怎么做。任何人都可以指定或建议其他解决方案吗?

谢谢。

【问题讨论】:

  • 你检查过名字吗,比如变量是projects,你可以试试projects["openprojects"]?你在控制台上看到了什么?
  • 是的,我尝试测试以输出对象并使用data: json_output_page_path,如下所述,您提到的符号。我无法让它工作。
  • 您能否在 jsfiddle 上托管代码的可行部分。调试起来会更容易。您不需要发布 AJAX 代码,只需假设 AJAX 已解决(或使用回显服务或其他东西)
  • 我在 link 上发布了一个 JSFiddle。我不太确定如何设置 JSON 调用,因为我以前没有 Fiddled。无论如何,我希望这是有道理的。谢谢。

标签: javascript jquery ajax json datatable


【解决方案1】:

使用var json = &lt;?php echo json_encode($arr); ?&gt; 对您的 php 数组进行编码 然后在&lt;script&gt; 标签中记录这个console.log( json ),看看你是否得到了正确的对象。

并让用户为您的数据表插件分配正确的选项

data: json_output_page_path 替换为"ajax": json_output_page_path

要访问您需要执行此操作的新对象 json.openprojects.datajson["openprojects"]["data"]

【讨论】:

  • 我已经对字符串进行了 json 编码,并且输出正确。当我不嵌套它时它也可以正常工作。在控制台中,我获得了输出 JSON 对象的控制器的路径。我没有得到实际的对象。如果是这种情况,那我该如何改变呢?
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多