如何解决jQuery插件“ Datatables”中基于Ajax的范围搜索
我正在使用基于jquery的表格插件“ datatables”,并且试图在两个数字(“开始日期” 和“结束日期” )。这些输入的值应用于MysqL列“ order_id”中的查询。
在服务器端脚本( fetch.PHP )上,我捕获了这两个值。
if(isset($_POST['start_date'],$_POST['end_date'])) {
$query .= 'order_id BETWEEN "'.$_POST["start_date"].'" AND "'.$_POST["end_date"].'" AND ';
}
问题是我在控制台中看不到任何错误,但是在使用数字范围搜索之后,没有显示结果。
“类别选择菜单”(类别和类别2)按预期方式工作。
我已经设置了一个测试站点,也许您可以帮助我找到错误:Testsite
这是我的脚本:
$(document).ready(function () {
var category = "";
var category2 = "";
var start_date = "";
var end_date = "";
load_data();
function load_data(is_category,is_category2,start_date,end_date) {
console.log(is_category,end_date);
var dataTable = $('#product_data').DataTable({
"processing": true,"serverSide": true,"order": [],"ajax": {
url: "fetch.PHP",type: "POST",data: {
is_category: is_category,is_category2: is_category2,start_date: start_date,end_date: end_date
},}
});
}
// Number Range Search
$('#search').click(function () {
console.log($(this).attr('id'),end_date)
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
if (start_date != '' && end_date != '') {
$('#product_data').DataTable().destroy();
load_data('','',end_date);
}
else {
alert("Both Date is required");
}
});
// Select Menu id="category"
$(document).on('change','#category,#category2',function () {
//console.log($(this).attr('id'),category,category2)
if ($(this).attr('id') === "category") {
category = $(this).val();
} else if ($(this).attr('id') === "category2") {
category2 = $(this).val();
}
//
$('#product_data').DataTable().destroy();
if (category != '') {
load_data(category,category2);
}
else {
load_data();
}
});
// Select Menu id="category2"
$(document).on('change','#category2',function () {
var category2 = $(this).val();
$('#product_data').DataTable().destroy();
if (category2 != '') {
load_data(category,category2);
}
else {
load_data();
}
});
});
fetch.PHP
//fetch.PHP
$connect = MysqLi_connect("localhost","xxxxx","xxxxx");
$columns = array('order_id','order_customer_name','order_item','order_value','order_date');
$query = "SELECT * FROM tbl_order WHERE ";
if(isset($_POST['start_date'],$_POST['end_date']))
{
$query .= 'order_id BETWEEN "'.$_POST["start_date"].'" AND "'.$_POST["end_date"].'" AND ';
}
if(isset($_POST["is_category"]))
{
$query .= "order_item = '".$_POST["is_category"]."' OR ";
}
if(isset($_POST["is_category2"]))
{
$query .= "order_customer_name = '".$_POST["is_category2"]."' AND ";
}
if(isset($_POST["search"]["value"]))
{
$query .= '
(order_id LIKE "%'.$_POST["search"]["value"].'%"
OR order_customer_name LIKE "%'.$_POST["search"]["value"].'%"
OR order_item LIKE "%'.$_POST["search"]["value"].'%"
OR order_value LIKE "%'.$_POST["search"]["value"].'%")
';
}
if(isset($_POST["order"]))
{
$query .= 'ORDER BY '.$columns[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].'
';
}
else
{
$query .= 'ORDER BY order_id DESC ';
}
$query1 = '';
if($_POST["length"] != -1)
{
$query1 = 'LIMIT ' . $_POST['start'] . ',' . $_POST['length'];
}
$number_filter_row = MysqLi_num_rows(MysqLi_query($connect,$query));
$result = MysqLi_query($connect,$query . $query1);
$data = array();
while($row = MysqLi_fetch_array($result))
{
$sub_array = array();
$sub_array[] = $row["order_id"];
$sub_array[] = $row["order_customer_name"];
$sub_array[] = $row["order_item"];
$sub_array[] = $row["order_value"];
$sub_array[] = $row["order_date"];
$data[] = $sub_array;
}
function get_all_data($connect)
{
$query = "SELECT * FROM tbl_order";
$result = MysqLi_query($connect,$query);
return MysqLi_num_rows($result);
}
$output = array(
"draw" => intval($_POST["draw"]),"recordsTotal" => get_all_data($connect),"recordsFiltered" => $number_filter_row,"data" => $data
);
echo json_encode($output);
解决方法
那是因为is_category和is_category2返回0。您的php上可能有一个if语句,例如if $ _POST [is_category],但是在没有选择类别的情况下也需要这样做。请分享完整的php来帮助您
在您的点击函数上替换load_data(start_date,end_date);带有load_data('','',开始日期,结束日期);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。