排序和搜索的jQuery Datatables间歇性问题
Posted
技术标签:
【中文标题】排序和搜索的jQuery Datatables间歇性问题【英文标题】:jQuery Datatables Intermittent issue with sort and search 【发布时间】:2021-08-30 22:45:15 【问题描述】:晚上好,
我在排序或搜索时遇到了一个奇怪的间歇性错误:SyntaxError: Unexpected end of JSON input
该错误是由于返回的 JSON 字符串为空引起的。但是,此问题仅在排序或搜索时不时发生。 (通常是我们输入太快或者在排序列上点击了几次。)
重要提示:此错误似乎只发生在托管环境中。一切都在 localhost 环境中运行。
数据表服务器端:https://pastebin.com/RiDdZLV1
型号:
<?php
ini_set('error_reporting', E_ALL);
ini_set("log_errors", 1);
ini_set("error_log", __DIR__."/errors.log");
require(__DIR__."/Database/Conn.php");
require(__DIR__."/Database/ServerDataTables.php");
echo json_encode(
SSP::complex(
$_POST,
"ws_persons",
"reservation_id",
array(
array( 'db' => 'reservation_id', 'dt' => 0 ),
array( 'db' => 'reservation_id', 'dt' => 1 ),
array( 'db' => 'firstname', 'dt' => 2 ),
array( 'db' => 'lastname','dt' => 3 ),
array( 'db' => 'death_place', 'dt' => 4 ),
),
"is_vet = 1",
null)
);
?>
html:
<!DOCTYPE html>
<html lang="en">
<head>
<link href="/assets/css/app.min.css" rel="stylesheet" type="text/css" />
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css"/>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js"></script>
</head>
<body>
<script>
$(function()
$('#resTable').DataTable(
"processing": true,
"serverSide": true,
"ajax":
"url": "Model/DB_Reservations.php",
"type": "POST",
"data":
action: "loadAllRes",
,
"error": function (xhr, error, code)
console.log(error);
console.log(code);
console.log(xhr);
,
);
);
</script>
<table id="resTable" class="table dt-responsive nowrap" style="border-collapse: collapse; border-spacing: 0; width: 100%;">
<thead>
<tr>
<th></th>
<th>Reservation #</th>
<th>Veteran</th>
<th>Location</th>
<th>Date</th>
</tr>
</thead>
</table>
</body>
</html>
感谢任何帮助。
【问题讨论】:
使用您的浏览器开发工具检查通过 AJAX 调用的 PHP 究竟返回了什么。很可能你有一个警告/通知,它破坏了 json 语法 我验证了控制台和网络响应。没有抛出任何错误 【参考方案1】:经过大量调试,我发现了问题。 Datatables 无法读取数据库中的某些字符。
因此,在 Datatables 服务器端脚本内的连接之后添加 $db->exec("set names utf8");
解决了我的问题。
https://datatables.net/forums/discussion/21242/invalid-json-response-when-adding-some-utf-8-characters
【讨论】:
以上是关于排序和搜索的jQuery Datatables间歇性问题的主要内容,如果未能解决你的问题,请参考以下文章
jQuery 插件 (DataTables) 仅在页面刷新时正确加载
jquery dataTables 插件可以在排序/过滤后尊重备用行颜色吗?
如何删除 jQuery DataTables 插件添加的搜索栏和页脚?