如何将 JSON 编码的 PHP 数组发送到同一页上的数据表

How to send JSON encoded PHP array to datatables on same page

这里有一个简单的问题,但我是数据表的新手,所以请原谅我的无知:我查询了我放在数组中的行,然后将其编码为 JSON 格式,我该如何发送这个数组到数据表以填充每一行?我看过其他线程,但他们使用 ajax 从外部引用脚本,而我的线程位于同一页面上(不确定这是否有所不同)。我的脚本如下所示:

<?php
if(isset($_POST['post_id'])){
    $in = $_POST['post_id'];
}
$data = array();
foreach ($in as $id){
    $query = $link->prepare("SELECT provider_num, provider_name, 233_net_charity_care, 291_cost_of_non_mcr_bad_debts, 301_cost_of_uncomp_care 
                            FROM `s10`
                            WHERE `id` = :id");
    $query->bindParam(':id', $id, PDO::PARAM_INT);
    $query->execute();
    $results = $query->fetch(PDO::FETCH_ASSOC);
    $data[] = $results;
}
json_encode($data);
?>

其中 post_id 是从上一个表单提交到页面的初始 id 值数组,为了简单起见,假设我这次只提交了一行。

JSON 输出如下所示

[{"provider_num":"140124","provider_name":"JOHN H. STROGER JR. HOSP OF COOK CTY","233_net_charity_care":"163307737","291_cost_of_non_mcr_bad_debts":"181677291","301_cost_of_uncomp_care":"344985028"}]

然后我用什么方式初始化数据表来接收这些数据

到目前为止我有:

$(document).ready(function() {
    $('#example').dataTable( {
        "ajax": "",                      <== What goes here?
        "columns": [
            { "data": "provider_num" },
            { "data": "provider_name" },
            { "data": "233_net_charity_care" },
            { "data": "291_cost_of_non_mcr_bad_debts" },
            { "data": "301_cost_of_uncomp_care" }
        ]
    } );
} );

任何见解都会很棒,一般来说,我对 jquery 还很陌生,如果这是一个简单的问题,我深表歉意。我试图阅读文档,但遇到了相关问题。

提前致谢

首先,如果你的前端脚本和服务器脚本(php)在同一个页面,你不需要使用ajax。

您可以在 php 脚本后像这样简单地设置数据

var tableData = <?php echo json_encode($data); ?>;  

然后在数据表初始化方法中,使用这个

$(document).ready(function() {
    $('#example').dataTable({
        "aaData": tableData,                               
        "aoColumns": [
            { "data": "provider_num" },
            { "data": "provider_name" },
            { "data": "233_net_charity_care" },
            { "data": "291_cost_of_non_mcr_bad_debts" },
            { "data": "301_cost_of_uncomp_care" }
        ]
    });
});