我正在尝试将 jQuery DataTables 与服务器端 PHP 结合使用,并使用 AJAX 和日期范围过滤
javascript代码
$(document).ready(function() {
$('#start_date, #end_date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var dataTable = $('#data-table').DataTable({
ajax: {
url: 'server_processing.php',
data: function (d) {
d.start_date = $('#start_date').val();
d.end_date = $('#end_date').val();
}
},
processing: true,
serverSide: true,
columns: [
{ "data": 'idbir' },
{ "data": 'Tarih' },
{ "data": 'Name' },
{ "data": 'Accred' }
]
});
$('#start_date, #end_date').on('change', function() {
dataTable.ajax.reload();
});
});
服务器处理.php
<?php
$sql_details = array(
'user' => 'root',
'pass' => '',
'db' => 'countries',
'host' => 'localhost'
);
$table = 'collegescores';
$primaryKey = 'idbir';
$columns = array(
array('db' => 'idbir', 'dt' => 0),
array(
'db' => 'Tarih',
'dt' => 1,
'formatter' => function ($d,$row) {
return date('Y-m-d', strtotime($d));
}
),
array('db' => 'Name', 'dt' => 2),
array('db' => 'Accred', 'dt' => 3)
);
require('ssp.class.php');
$where = '';
if (isset($_GET['start_date'])) {
$start_date = date('Y-m-d', strtotime($_GET['start_date']));
$where .= "Tarih >= '$start_date'";
}
if (isset($_GET['end_date'])) {
$end_date = date('Y-m-d', strtotime($_GET['end_date']));
$where .= ($where ? ' AND ' : '') . "Tarih <= '$end_date'";
}
echo json_encode(
SSP::simple($_GET, $sql_details, $table, $primaryKey, $columns, $where)
);
?>
错误: DataTables 警告:表 id=data-table - 请求第 0 行第 0 列的未知参数“idbir”。有关此错误的更多信息,请参阅 http://datatables.net/tn/4
这是一个解决方案。对于造成的混乱深表歉意。
我会尽力解释。
所以,我猜您是使用 AJAX 的新手,如果您不是,那么抱歉。 ajax 需要 3 个边界:
Method:
您缺少
method
(如何从 JS 文件获取数据),但因为看起来您在 PHP 中使用了 $_GET
,对于 method
,您需要编写 method: 'GET'
url:
你的
url
很好。
data:
data
是您将要在 PHP 文件中使用/更改的 JS 文件中的值放入的位置。在这种情况下,您想要获得 start_date
和 end_date
。
因此,请尝试在 ajax 部分使用此代码:
// Make sure to get the value of end and start date
ajax: {
method: 'GET',
url: 'server_processing.php',
data: {
'start_date': start_date,
'end_date': end_date
// The value on left is the value that php will recognize and value on right is the JS value that it is equal to.
},
success: function(start_date, end_date) {
// If the php code runs success then get return values and do something here
}
},
希望这有帮助:)