如何无需加载外部文件,实现div内容的定时刷新?
解决方案:无需外部文件实现div定时刷新
不行直接用空的load()方法哦——load()必须指定一个URL来获取内容,没有目标地址的话它没法知道该刷新什么内容。不过既然你已经把PHP函数移到当前文档里了,我们可以换个更巧妙的方式,不用额外外部文件就能实现需求。
方法一:在当前页面添加AJAX接口(推荐)
我们可以在当前页面里加一段判断逻辑,当AJAX请求携带特定参数时,只返回dateDiff的计算结果,而不是整个页面。这样既复用了已有的PHP函数,又避免了加载多余内容。
- 修改你的PHP代码,在页面最顶部添加以下逻辑:
<?php // 处理AJAX请求的接口 if (isset($_GET['action']) && $_GET['action'] === 'get_date_diff') { function dateDiff($date1, $date2 = false) { date_default_timezone_set("Asia/Dushanbe"); if($date2 == false) $date2 = date("Y-m-d H:i:s"); $date_1 = new DateTime($date1); $date_2 = new DateTime($date2); $diff = $date_1->diff($date_2); if ($diff->days > 365) { return $date_1->format('Y-m-d'); } elseif ($diff->days > 7) { return $date_1->format('M d'); } elseif ($diff->days > 1) { return $date_1->format('l - H:i'); } elseif ($diff->days == 1) { return "Yesterday ".$date_1->format('H:i'); } elseif ($diff->days > 0 OR $diff->h > 1) { return $date_1->format('H:i'); } elseif ($diff->i >= 1) { return $diff->i." min ago"; } elseif ($diff->d == 0 AND $diff->s < 60) { return $diff->s." sec ago"; } else { return "Just now"; } } // 输出计算结果并终止页面其他内容输出 echo dateDiff("2018-01-13 13:26"); exit; } // 下面是你原本的页面内容 ?>
- 修改JavaScript代码,让
load()请求当前页面并带上指定参数:
<script src="jquery-latest.min.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> var refreshId = setInterval(function() { // 用当前页面URL加上参数,请求我们的接口 $('#links').fadeOut("slow") .load(window.location.href + "?action=get_date_diff") .fadeIn("slow"); }, 5000); $.ajaxSetup({ cache: false }); </script>
为什么不能用空load()?
load()是jQuery封装的AJAX加载方法,它的核心逻辑就是向指定URL发送请求,把返回的内容插入到目标元素中。如果不提供URL,它没有数据源可以获取内容,自然无法完成刷新操作。
内容的提问来源于stack exchange,提问作者Andreas Hunter
相关产品推荐
相关产品推荐

