我正在开发一个脚本,我需要它来检查DB中的更改。
每次执行edit.php
时,它都会生成一个时间戳并将其保存在DB中。如果在DB中保存了较新的时间戳,则需要刷新edit.php
页面。
因此,我创建了一个页面,该页面显示保存在DB (checkupdates.php
)上的当前时间戳,并使JS脚本检查页面并比较时间戳。如果DB one较新,则需要刷新页面。
我没有javascript的概念,到目前为止,我的页面没有对当前脚本的响应。
到目前为止,我得到的是:
edit.php
<?php
$date = new DateTime();
$utime = $date->getTimestamp(); //GET TIMESTAMP ON PAGE LOAD
updatetimestampondb($id, $utime); //UPDATE DB WITH CURRENT TIMESTAMP
?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
var updatetime = "<?php echo $utime; ?>"; //The timestamp saved in the DB when the page is executed
function checkUpdate() {
$.ajax({
url: 'checkupdates.php?id=$id',
timeout: 2000,
success: function(data) {
if (currentTS < updatetime) {
alert('The page will be reaload');
location.reload();
}
});
}
setInterval(checkUpdate, 5000);
</script>
checkupdates.php
<?php
(...) //Check DB Script for actual timestamp saved
echo "<script>var currentTS = ".$sheet->utime.";</script>";
(...)
?>
谢谢!
发布于 2017-10-22 21:34:35
最好是在ajax中发送json响应,因为js代码将不能正常工作,请尝试以下操作:
$response = ["currentTS" => $sheet->utime];
echo json_encode($response);
然后编写ajax,如下所示(如果$id
是一个php,那么将它写为<?=$id?>
):
function checkUpdate() {
$.ajax({
url: 'checkupdates.php?id=$id',
timeout: 2000,
dataType: 'json',
success: function(data) {
if (data.currentTS < updatetime) {
alert('The page will be reaload');
location.reload();
}
});
发布于 2017-10-22 21:22:53
echo "<script>var currentTS = ".$sheet->utime.";</script>";
不会在Ajax请求中工作。您需要发送回JSON:
echo '{"currentTS" : "'.$sheet->utime.'"}';
然后在AJAX成功中添加dataType: 'json'
data.currentTS < updatetime
以上将解决您的问题与数据回来。然而,我想知道为什么这么详细。您就不能每隔5秒向服务器发出请求,然后动态更新页面上的组件吗?
发布于 2017-10-22 21:30:59
不能通过AJAX直接在HTML脚本中回显javascript。你能做的是以下几点。
在checkupdates.php
中
<?php
// ...
echo $sheet->utime;
然后,不要使用变量data
,而是使用变量currentTS
。
https://stackoverflow.com/questions/46879278
复制相似问题