【问题标题】:Ajax sourced data using jQuery DataTables使用 jQuery DataTables 获取 Ajax 数据
【发布时间】:2017-03-12 03:18:58
【问题描述】:

我想使用 jQuery DataTables 插件将我的 MongoDb 集合之一显示到表中。

但是,我得到了如下所示的弹出消息:

为第 0 行第 0 列请求未知参数“0”。更多信息 有关此错误的信息,请参阅http://datatables.net/tn/4

以下部分代码以 MongoDb 程序方式从 jobs collection 中选择 job idtitlesubmittedstatus 列:

提交.php

$filter = ['user_id' => $_SESSION['google_id']];
$query = new MongoDB\Driver\Query($filter);

try {

    $cursor = $manager->executeQuery($dbname.'.'.$collection, $query);
    $arr = array();     
    foreach($cursor as $c){         
        $temp = array("job_id" => $c->job_id, "title" => $c->title, "submitted" => $c->submitted, "status" => $c->status);
        array_push($arr, $temp);
    }
    echo json_encode($arr);

} catch (MongoDB\Driver\Exception\Exception $e) {
    echo $e->getMessage(), "\n";
}

并在 HTML 页面中显示:

jobs.php

<table id="tableJobs"></table>
<script>
$(document).ready(function(){
    $.ajax({
      type: "POST",
      url: "submit.php",
      data: "",
      dataType: "json",
      success: function(resultData) {
          var opt={
            "bProcessing":true,
            "aoColumns":
            [
                {"sTitle":"Submission"},
                {"sTitle":"Title"},
                {"sTitle":"Submitted On"},
                {"sTitle":"Status"}
            ],
            "aaData": resultData
         };         
       $("#tableJobs").dataTable(opt);
       }
     });    
});
</script>

我错过了哪些步骤?如何让它在 HTML 表中显示来自 db 的所有 JSON 数据源,如下所示:

<tr>
<td>F37CE14A-506C-24E7-EBDC-362216BB9089</td>
<td>Demo</td>
<td>2017-03-01 06:47:03</td>
<td>Finished</td>
</tr>

提前感谢您的帮助。

【问题讨论】:

  • 您的数据库行是否有任何空或空列值?
  • @Yolo 未显示空值。这是我的 JSON 格式:[{"job_id":"BB520E08-A183-CBEB-BAE2-006056169116","title":"LA001","submitted":"2017-03-12 11:27:41","status":"Running"}]

标签: php json ajax mongodb datatables


【解决方案1】:

这正是问题所在(至少数据表文档所说的)。在您的行中的某处,您似乎有空值或空值。尝试将它们初始化为空字符串。

$job_id = !empty($c->job_id) ? $c->job_id : '';
$title = !empty($c->title) ? $c->title : '';
$submitted = !empty($c->submitted) ? $c->submitted : '';
$status = !empty($c->status) ? $c->status : '';

$temp = array("job_id" => $job_id, "title" => $title, "submitted" => $submitted, "status" => $status);

您还需要告诉浏览器期待什么,即 JSON。所以在输出你的数据之前添加一个头部函数:

header('Content-Type: application/json'); // add this line here
echo json_encode($arr);

更新

因此,查看数据表的文档,您需要使用“aoColumns”对象上的属性“mDataProp”设置列标识符。然后将这些声明的键设置为结果中的数组键。请参阅下面的小提琴:

$(document).ready(function(){

    var resultData = [
    {"Submission":"BB520E08-A183-CBEB-BAE2-006056169116","Title":"LA001","Submitted On":"2017-03-12 11:27:41","Status":"Running"},
    ];
    var opt={
            "bProcessing":true,
            "aoColumns":
            [
                {"mDataProp":"Submission"},
                {"mDataProp":"Title"},
                {"mDataProp":"Submitted On"},
                {"mDataProp":"Status"}
            ],
            "aaData": resultData
         };         
    $("#tableJobs").dataTable(opt);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
<table id="tableJobs"></table>

更正这个sn-p:

$temp = array("job_id" => $job_id, "title" => $title, "submitted" => $submitted, "status" => $status);

到这个:

$temp = array("Submission" => $job_id, "Title" => $title, "Submitted On" => $submitted, "Status" => $status);

在回显任何内容之前,您仍然需要此行:

header('Content-Type: application/json'); // add this line here
echo json_encode($arr);

【讨论】:

  • 我在初始化所有变量后得到了同样的错误信息。
  • 对不起,这个解决方案不适合我。顺便说一句,错误消息Requested unknown parameter '{parameter}',它是一个等于0 的整数。当 {parameter} 为整数时,DataTables 正在从数组中查找数据。在这种情况下,请求的数据在源数组中不存在 - 可能是因为数组不够长。 (至少数据表手册说的),但我不知道如何修复它。
  • 也许我错了,如果是,那么我用谷歌搜索了错误的关键字并为此道歉。还有其他解决方案吗?再次感谢!
猜你喜欢
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2021-04-01
相关资源
最近更新 更多