PHP-AJAX:如何通过 php/json 数组从查询中填充 jquery 数据表

Posted

技术标签:

【中文标题】PHP-AJAX:如何通过 php/json 数组从查询中填充 jquery 数据表【英文标题】:PHP-AJAX: How to populate jquery datatables from a query through php / json array 【发布时间】:2017-03-18 19:22:46 【问题描述】:

我刚刚开始研究 Datatables jQuery Plugin,我很难让它与我当前的工作配合使用。

我通常使用 AJAX 回调来填充表,方法是从数组中获取我想要的值,通过 php 脚本查询数据库。对于我在数据表网站上阅读的内容,可能会出现类似的情况,但我不断收到错误,所以我将发布我到目前为止所做的事情,希望有人可以帮助我。

这就是我使用一些 ajax 参数调用数据包的方式。

<script>
$(document).ready( function () 
    $('#test_table').DataTable(
        "processing": true,
        "serverSide": true,
        "ajax": 
            "url": "test.php",
            "type": "POST"
        ,
        "columns": [
             "data": "id" ,
             "data": "name" ,
             "data": "email" 
        ]
    );
 );
</script>

这就是php端的样子。

$sql = "SELECT * FROM test_table";
$res = mysqli_query($conn, $sql) or die("Error: ".mysqli_error($conn));

$columns = array(
            array('db' => $row['id'], 'dt' => 'id'),
            array('db' => $row['name'], 'dt' => 'name'),
            array('db' => $row['email'], 'dt' => 'email'),
    );

echo json_encode($columns);

但是,我收到一条错误消息,提示“未定义数据”。 (注意。我阅读了 datatables 网站上的文档,但我并没有完全按照它的步骤进行操作。我将此作为我要完成的工作的参考。Datatables Server Side POST

我可能在这方面完全错了,但我不想过多地更改我的代码,所以我尝试了一种我认为可行的方法。如果有人能告诉我如何通过从 php > json 数组调用中查询数据库来填充数据表,我将不胜感激。

提前致谢,

【问题讨论】:

在编码之前将 array('data'=&gt; /**/) 包裹起来 PHP 端不正确。查看有关如何显示数据的文档 【参考方案1】:

感谢大家的投入。我想出了一个办法让它发挥作用。

我希望能够在 jquery 回调中将数据发送到数据表,因为这将允许我在数据表之外创建自己的搜索。我这样做的方式是运行一个 ajax 调用,该调用执行对数据库的查询,然后将该查询的结果传递给数据表,但问题是如何以数据表可以接受的方式格式化数据和如何让它读取数据以显示在表格上。

简单的 ajax 调用和填充数据表

此代码可以进一步修改(我将在我的情况下这样做),但它应该让您了解如何完成我一直想做的事情。 (顺便说一句)。

<script>
$('document').ready(function()

    $.ajax(
    type : 'POST',
    url  : 'test.php',
    dataType: 'json',
    cache: false,
    success :  function(result)
        
            //pass data to datatable
            console.log(result); // just to see I'm getting the correct data.
            $('#test_table').DataTable(
                "searching": false, //this is disabled because I have a custom search.
                "aaData": [result], //here we get the array data from the ajax call.
                "aoColumns": [
                   "sTitle": "ID" ,
                   "sTitle": "Name" ,
                   "sTitle": "Email" 
                ] //this isn't necessary unless you want modify the header
                  //names without changing it in your html code. 
                  //I find it useful tho' to setup the headers this way.
            );
        
    );
);
</script>

test.php

这是我用于测试的简单版本。我的实际代码要大得多,因为它有几个用于查询和搜索的部分。

<?php

$columns = array( 
// datatable column index  => database column name
    0 => 'id',
    1 => 'name',
    2 => 'email',
);

$sql = "SELECT * FROM test_table";
$res = mysqli_query($conn, $sql) or die("Error: ".mysqli_error($conn));
$dataArray = array();
while( $row = mysqli_fetch_array($res) ) 


    $dataArray[] = $row["id"];
    $dataArray[] = $row["name"];
    $dataArray[] = $row["email"];



echo json_encode($dataArray);

?>

这大大简化了事情,至少对我来说是这样。我不想包含其他库“ssp.class.php”。我也不想进入 PDO。所以这让它变得更加灵活,我希望它可以帮助其他正在尝试完成类似事情的人。

【讨论】:

【参考方案2】:
$columns = array(
 'data'=>
   array(
        $row[0]['id'],
        $row[0]['name'],
        $row[0]['email'],
   )
);

格式正确

更新:你不会循环结果

【讨论】:

【参考方案3】:

如果你想使用服务器端处理,你需要包含服务器端帮助类ssp.class.php并使用它,如this example所示。

例如:

// DB table to use
$table = 'test_table';

// Table's primary key
$primaryKey = 'id';

// Array of database columns which should be read and sent back to DataTables.
// The `db` parameter represents the column name in the database, while the `dt`
// parameter represents the DataTables column identifier. In this case object
// parameter names
$columns = array(
    array( 'db' => 'id',    'dt' => 'id' ),
    array( 'db' => 'name',  'dt' => 'name' ),
    array( 'db' => 'email', 'dt' => 'email' )
);

// SQL server connection information
$sql_details = array(
    'user' => '',
    'pass' => '',
    'db'   => '',
    'host' => ''
);


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * If you just want to use the basic configuration for DataTables with PHP
 * server-side, there is no need to edit below this line.
 */

require( 'ssp.class.php' );

echo json_encode(
    SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
);

【讨论】:

谢谢 Gyrocode.com。我在最初的帖子中提到我已经经历过,但我不想那样做,因为它会要求我做我不想做的事情。我想通了。我已经发布了答案。

以上是关于PHP-AJAX:如何通过 php/json 数组从查询中填充 jquery 数据表的主要内容,如果未能解决你的问题,请参考以下文章

如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML

如何将php json数组转换为yaml

PHP json_encode 变量如何转换成数组?

PHP-AJAX CORS 由于 Access-Control-Allow-Origin 而失败

如何使用php json数组在带有angularjs的cordova中实现推送通知

php json - 以返回的数组顺序显示问题(json 排序)