我已经通过jquery在我的页脚上加载了一些代码(因此访问的每个页面都在其页面上有代码)
此代码用于检查数据库,如果有任何响应,则将引导模式发送到客户端。发送模式时,将从数据库中删除该行。发生更新时,每个用户在数据库中都有自己的行。
每10秒重新加载一次页脚代码,以检查相对表是否有任何更新。
这样做,除非删除行后,PHP似乎在我不应该执行的if块中执行代码,因为它导致模式关闭或堆积在彼此之上,迫使客户端重新加载页面以继续浏览。
因此,假设客户端加载索引页面,并且它们有等待它们的待处理消息。 发送模式以供用户手动关闭。如果用户等待超过10秒,模式将自行关闭,但背景将保留,使得用户无法点击任何内容,直到重新加载页面。如果用户再等10秒钟,则会添加另一个背景幕,使屏幕变暗。这种情况一直持续到屏幕完全变黑或客户端重新加载页面为止。
如果块基本上声明它不应该执行,则打开模态的代码在2中。
这是我的重新加载代码:
<?
include("dbConnect.php");
$sql = "SELECT DISTINCT Message,uniqueID from sendMessage WHERE UserID='".$_GET['userID']."';";
$ret = $db->query($sql);
$loop = 0;
$messages = array();
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
$loop++;
array_push($messages,array("uniqueID" => $row['uniqueID'], "Message" => $row['Message']));
}
if($loop != 0) {
if(!empty($messages)) {
?>
<script type="text/javascript">
$(document).ready(function () {
$('.modal').modal('hide');
$('#memberModal').modal('show');
});
</script>
<!-- Modal -->
<div class="modal fade" id="memberModal" tabindex="-1" role="dialog" aria-labelledby="memberModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="memberModalLabel">Message from Administrators</h4>
</div>
<div class="modal-body">
<?
foreach($messages as $v) {
echo $v['Message'];
if($loop > 1) {
echo "<br><br>";
}
}
?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<?
foreach($messages as $v) {
$sql2 = "DELETE from sendMessage where uniqueID='".$v['uniqueID']."';";
$ret2 = $db->exec($sql2);
}
}
}
?>
据我所知,所有进口都是正确的(否则模态根本不起作用,对吗?)
这是我的页脚中的jquery:
<div id="links"></div>
<script>
function loadlink(){
$('#links').load('templates/sendMessage.php?userID=<?=$userInfo['uniqueid'];?>',function () {});
}
loadlink(); // This will run on page load
setInterval(function(){
loadlink() // this will run after every 5 seconds
}, 10000);
</script>
- 编辑 -
我怀疑我的问题是因为在模态打开时再次重新加载div,因此打破了它,因为它正在删除模态所在的代码。我不确定如何解决这个问题。
答案 0 :(得分:0)
代码不完整,但从我可以告诉你的ajax脚本应该只发送模态的内容,而不是整个模态,append()
它(如果你想要的话,使用html()
删除以前的消息)<div class="modal-body">
然后显示模态。现在您将整个模态代码插入模态中并获得babushka效果。
- 编辑 -
在你的php脚本中,只返回消息,而不是模态html:
[...]
if($loop != 0) {
if(!empty($messages)) {
foreach($messages as $v) {
echo $v['Message'];
if($loop > 1) {
echo "<br><br>";
}
}
[...]
页脚中的
<!-- Modal -->
<div class="modal fade" id="memberModal" tabindex="-1" role="dialog" aria-labelledby="memberModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="memberModalLabel">Message from Administrators</h4>
</div>
<div class="modal-body">
// mesages will be inserted here
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
function loadlink(){
$('.modal-body').load('templates/sendMessage.php?userID=<?=$userInfo['uniqueid'];?>',function () {
// maybe add a condition to see if nothing is returned
// and not show it
$('#memberModal').modal('show');
});
}
loadlink(); // This will run on page load
setInterval(function(){
loadlink() // this will run after every 5 seconds
}, 10000);
</script>