【问题标题】:datatable and jquery doesn't working数据表和 jquery 不起作用
【发布时间】:2018-04-20 11:07:47
【问题描述】:

伙计们,我对这段代码感到疯狂: 我正在尝试使用数据表插件填充我的数据网格,但我不明白为什么它不起作用。我有一条消息:

DataTables 警告:表 id=item_data - 无效的 JSON 响应。

$(document).ready(function() {
    $('#item_data').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax":{
            url:"item_fetch.php",
            type:"POST"
        },
        "columnDefs":[
            {
                "targets":[7, 8, 9],
                "orderable":false,
            },
        ],
        "pageLength": 10 
    });
});
<script src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<table id="item_data" class="table table-bordered table-striped">
  <thead>
    <tr>                                
      <th>Item Code</th>
      <th>Item Description</th>
      <th>Product Line</th>                                 
      <th>Purchase Standard Cost</th>
      <th>Last Receipt</th>                                 
      <th>Status</th>                                   
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>                          
  <?php //include("item_list.php"); ?>                          
</table>

理论上 item_fetch 执行查询以填充我的数据网格,但 java 代码不读取表 id。 在我的 item_fetch 代码上方

<?php

//item_fetch.php

include('phpfunc/database_connection.php');
include('phpfunc/function.php');

$query = '';

$output = array();
$query .= "
    SELECT * FROM item 
    INNER JOIN i_prodline ON i_prodline,prodline_id = item.item_prodline
";

if(isset($_POST["search"]["value"]))
{
    $query .= 'WHERE i_prodline.prodline_cod LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR i_prodline.prodline_desc LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR item.item_code LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR item.item_desc LIKE "%'.$_POST["search"]["value"].'%" ';  
}

if(isset($_POST['order']))
{
    $query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order']['0']['dir'].' ';
}
else
{
    $query .= 'ORDER BY item_code DESC ';
}

if($_POST['length'] != -1)
{
    $query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)
{
    $status = '';
    if($row['item_status'] == 'active')
    {
        $status = '<span class="label label-success">Active</span>';
    }
    else
    {
        $status = '<span class="label label-danger">Inactive</span>';
    }
    $sub_array = array();
    $sub_array[] = $row['item_code'];
    $sub_array[] = $row['item_desc'];
    $sub_array[] = $row['prodline_cod'];
    $sub_array[] = $row['item_standardcost'];
    $sub_array[] = $row['item_datareceipt'];    
    $sub_array[] = $status;
    $sub_array[] = '<button type="button" name="view" id="'.$row["item_id"].'" class="btn btn-info btn-xs view">View</button>';
    $sub_array[] = '<button type="button" name="update" id="'.$row["item_id"].'" class="btn btn-warning btn-xs update">Update</button>';
    $sub_array[] = '<button type="button" name="delete" id="'.$row["item_id"].'" class="btn btn-danger btn-xs delete" data-status="'.$row["item_status"].'">Delete</button>';
    $data[] = $sub_array;
}

function get_total_all_records($connect)
{
    $statement = $connect->prepare('SELECT * FROM item');
    $statement->execute();
    return $statement->rowCount();
}

$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rows,
    "recordsFiltered"   =>  get_total_all_records($connect),
    "data"              =>  $data
);

echo json_encode($output);

?>

请问我该如何解决?我不明白错在哪里。

【问题讨论】:

  • 您的实时代码中有echo $query; 吗?因为在这种情况下,您的 JSON 会附加到该回显中,因此它是无效的 JSON。
  • 活码是指这里?我很抱歉我的愚蠢问题..
  • 给你这个错误的实际代码。这不是您遇到该错误时代码中没有的一些调试遗留问题?
  • 这是我的实际代码,java和html代码在同一个页面,然后我有item_fetch.php ....不同的是脚本src在不同的页面。
  • 是:“在 i_prodline,prodline_id”对吗? i_prodline 和 prodline_id 之间有一个“,”。不应该是“。” (点)?

标签: php jquery datatables


【解决方案1】:

看起来你在你的 php 代码中留下了一些调试回显,它产生了无效的 JSON(因此来自 Datatable API 的消息)。

请在您的 php 代码中注释第 32 行。 下面是它以后的样子:

<?php
//item_fetch.php

include('phpfunc/database_connection.php');
include('phpfunc/function.php');

$query = '';

$output = array();
$query .= "
    SELECT * FROM item 
    INNER JOIN i_prodline ON i_prodline,prodline_id = item.item_prodline
";

if(isset($_POST["search"]["value"]))
{
    $query .= 'WHERE i_prodline.prodline_cod LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR i_prodline.prodline_desc LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR item.item_code LIKE "%'.$_POST["search"]["value"].'%" ';
    $query .= 'OR item.item_desc LIKE "%'.$_POST["search"]["value"].'%" ';  
}

if(isset($_POST['order']))
{
    $query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order']['0']['dir'].' ';
}
else
{
    $query .= 'ORDER BY item_code DESC ';
}
//forgot to comment out debug echos
//echo $query;
if($_POST['length'] != -1)
{
    $query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)
{
    $status = '';
    if($row['item_status'] == 'active')
    {
        $status = '<span class="label label-success">Active</span>';
    }
    else
    {
        $status = '<span class="label label-danger">Inactive</span>';
    }
    $sub_array = array();
    $sub_array[] = $row['item_code'];
    $sub_array[] = $row['item_desc'];
    $sub_array[] = $row['prodline_cod'];
    $sub_array[] = $row['item_standardcost'];
    $sub_array[] = $row['item_datareceipt'];    
    $sub_array[] = $status;
    $sub_array[] = '<button type="button" name="view" id="'.$row["item_id"].'" class="btn btn-info btn-xs view">View</button>';
    $sub_array[] = '<button type="button" name="update" id="'.$row["item_id"].'" class="btn btn-warning btn-xs update">Update</button>';
    $sub_array[] = '<button type="button" name="delete" id="'.$row["item_id"].'" class="btn btn-danger btn-xs delete" data-status="'.$row["item_status"].'">Delete</button>';
    $data[] = $sub_array;
}

function get_total_all_records($connect)
{
    $statement = $connect->prepare('SELECT * FROM item');
    $statement->execute();
    return $statement->rowCount();
}

$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rows,
    "recordsFiltered"   =>  get_total_all_records($connect),
    "data"              =>  $data
);

echo json_encode($output);

?>

【讨论】:

  • @Fabio 请在代码更新后发布您的 php 代码输出 (json)。如果您的控制台中的数据表 API 有任何错误/警告,也请发布 - 可能已经更改。
  • 我没有收到此代码的响应,如果我尝试在 nwe 项目中复制此代码,我有一个空表并且没有错误...我真的很困惑
  • 请在您的 php 脚本开头添加这些行。 error_reporting(E_ALL); ini_set('display_errors', 1); 这样你的脚本就会显示错误。请再次检查 php 输出。
  • 如果您正在检查您的 php 输出,您将看不到任何 javascript 错误(它不是 java)。请找到一种方法来直接查询您的 php 脚本并发布它的输出。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
相关资源
最近更新 更多