用php在做一个发布部门公告的模块,
发布人选择发送对象,给他发布一个公告,然后发送对象那边马上弹出一个类似QQ空间消息提醒那样的功能。
开始考虑的是通过js中的setInterval()定时 执行一个ajax去检索数据库,可过一段时间游览器就崩溃了,设置时间为30秒也会崩溃。
我想要实现这个即时的功能,还有什么别的办法吗?请各位前辈们给看看啊..
发布人选择发送对象,给他发布一个公告,然后发送对象那边马上弹出一个类似QQ空间消息提醒那样的功能。
开始考虑的是通过js中的setInterval()定时 执行一个ajax去检索数据库,可过一段时间游览器就崩溃了,设置时间为30秒也会崩溃。
我想要实现这个即时的功能,还有什么别的办法吗?请各位前辈们给看看啊..
你可以看看一些论坛比如dz的提示功能是怎么写的.
ob_flush();
flush();
sleep(30);
或者通过ajax,但是这样效率确实很低
实现方法有两种:
一、服务器长连接(少数服务器支持)
二、JS定时查询,但请注意一点,数据结果不要用HTML,建议使用XML(首选)、JSON,这样可以防止IE之类的浏览器崩溃。
----
<meta http-equiv="refresh" content="间隔时间" />
<script>
msg = null;
<?php
$msg = get_msg();
echo 'var msg = "'.$msg.'"';
?>
if (msg ) {
top.notice(); //这个函数你自己写哈
}
</script>
非常感谢您的帮助啊,
不过
<script>
msg = null;
<?php
$msg = get_msg();
echo 'var msg = "'.$msg.'"';
?>
if (msg ) {
top.notice(); //这个函数你自己写哈
}
</script>
这些代码是什么意思啊,我看不太懂,您能简单和我说说吗?谢谢谢谢
index.php<iframe src="reminding.php""></iframe>
reminding.php<?php session_start();?>
<html>
<head>
<meta http-equiv="refresh" content="2"/>
<script type="text/javascript" src="reminding.js" language="javascript"></script><引入消息提醒的js文件-->
<script type="text/javascript">
$(document).ready(function(){alert('aa');
tanchureminding();
})
</script>
</head>
<body>
<?php//连接数据库
$db=public_DBConnect(DB_NAME,DB_HOST,DB_PASSWORD,DB_USER);$sql="select * from oanoticereceiver where receiverid=".$_SESSION['oa_userid']."";
$result=$db->query($sql);
$num=$result->num_rows;
if($num)
{
$i=0;
while ($rows=$result->fetch_array())
{
echo "<input type=\"hidden\" id=\"hid_saveid\" name=\"hid_saveid[]\" value=\"".$rows['id']."\">"; }
}?>
</body>>
</html>原理明白了,可还有几个问题啊。
1 引入js文件,和调用js函数,是要在index.php,还是reminding.php里啊
2 是要直接刷新reminding.php页面就行了吗?像我上面写的那样,js函数都不好用啊,说是缺少对象,这是怎么了啊
调用js函数,要在reminding.php里假设 tanchureminding 函数在index.php里用于显示信息,reminding.php里调用时用
parent.document.tanchureminding()
其实路径是这样,
index.php
reminding/reminding.php
index.php和reminding是在同一级目录,reminding.php中用“parent.document.tanchureminding()”也还是调用不到js中的函数啊,还是缺少对象啊
main.php<script>
num = 0;function foo() {
document.getElementById('view').innerHTML = num++;
}
</script>
<div id=view></div>
<iframe src=subwin.php style='display:none'></iframe>subwin.php<meta http-equiv="refresh" content="2" />
<script>
parent.foo();
</script>你可在此基础上,实验你的代码
先静态后动态
我想着在subwin.php 里面进行数据库操作,把查询出来的相应的数据存到隐藏域里,
<input type=\"hidden\" id=\"hid_remind\" value=\"数据\">
这个隐藏域是在subwin.php里然后在js函数中判断,如果这个隐藏域值不为空,则弹出消息(div id='view')提醒。可这个js文件是在main.php中导入的,即使在subwin.php中parent.foo();也是找不到这个隐藏域的我该如何在js中判断啊??