php - 使用从 AJAX 请求返回的 Db 记录更新数据表
问题描述
我有一个非常基本的 HTML 表格。数据来自数据库。我现在已经设置了一个带有按钮的日期选择器,一旦单击该按钮,我就会执行 AJAX 请求以获取特定日期的特定数据。(为了更容易,我的查询只是以 id=1 为例)。我现在想返回数据并更新数据表,但不幸的是数据返回了,但没有显示。
data […]
0 {…}
id 1
category_id 1
title Technology Post One
以上就是返回的内容。我在上面的格式中犯了错误还是如何更新数据表?我收到以下错误:
DataTables 警告:表 id=example - 请求第 0 行第 0 列的未知参数“0”
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "api_db";
if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& !empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM posts WHERE id = 1";
result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
} else {
echo "0 results";
}
$conn->close();
$msg = ["data" => $rows];
// handle request as AJAX
echo json_encode($msg);
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Practise</title>
<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.20 js/jquery.dataTables.js"></script>
</head>
<body>
<?php
$sql = "SELECT * FROM posts";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
$conn->close();
?>
<table id="example" border="1"><thead>
<th>id</th>
<th>title</th>
<th>created at
<p>Date: <input type="text" id="datepicker"><button>Click</button> </p>
</th>
</thead>
<?php
foreach ($rows as $value){
echo '<tr>';
echo '<td>'.$value['id'].'</td>';
echo '<td>'.$value['title'].'</td>';
echo '<td>'.$value['created_at'].'</td>';
echo '</tr>';
}
echo '</table>'
?>
</body>
<script>
$(document).ready(function() {
$('#example').DataTable({
"columns": [
{"data": "id"},
{"data": "author"},
{"data": "created_at"}
],
},
);
$( "#datepicker" ).datepicker();
$("button").click(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
data: {
created_at: $("#datepicker").val()
},
success: function(data) {
$('#example').DataTable().ajax.reload();
},
error: function(result) {
alert('error');
}
});
});
} );
解决方案
您可以更新 js 脚本并为 ajax 调用创建一个新的 php 文件,该文件将返回新的数据表。试试这个代码它会工作 -
<script>
var created_at = '';
$(document).ready(function() {
var datatable = $('#example').DataTable({
'processing': true,
'scrollX': true,
'serverSide': true,
'serverMethod': 'post',
'searching' : true,
'ajax': {
url:'new-file.php',
data: function(data){
data.created_at = created_at;
}
},
"columns": [
{"data": "id"},
{"data": "author"},
{"data": "created_at"}
],
});
$( "#datepicker" ).datepicker();
$("button").click(function(e) {
e.preventDefault();
created_at = $("#datepicker").val();
datatable.draw();
});
} );
</script>
推荐阅读
- sql - 如何解析未知字符串之间的数据
- javascript - 将 Axios 承诺返回给几个调用者
- jmeter - 如何在 taurus 报告控制台视图中添加滚动,以便显示完整的详细信息
- spring-cloud-gateway - ReactiveLoadBalancerClientFilter 中的健康检查
- r - 更快地计算与 R 中的值匹配的行
- javascript - 在小提琴图表 PlotlyJS 中突出显示一点
- javascript - 无法访问数组内 json 对象的属性
- iis-10 - Http 错误 500.19 - 内部服务器错误 - 重复文件扩展
- python - 在 numba cuda.jit 中没有 numpy 函数有效
- flutter - 有没有办法从一个屏幕过渡到另一个屏幕,而不使用任何事件,只使用时间?