我已经准备了一段时间了,我想做的事情。 我想要做的是在顶部显示一条消息(确认,“你已经获得了2分”)(像stackoverflow这样的消息)。
我已经使用会话变量存储了一条确认消息,然后在index.php中有一个ajax脚本,每1秒加载一次session.php,用于检查是否有要显示的消息。
但是我想知道,这不能以另一种方式完成吗?我的意思是,它是否需要一直检查每1秒
我的网站是index.php上的一个设计,然后你正在浏览框架内的其余部分。
无论如何,我已经找到了解决方案,我认为它可能会对服务器请求太多。
所以我想知道,这不能以另一种方式完成吗?我的意思是,它是否需要一直检查每一秒?
如果您正确插入了评论,并且存储了名为user_message的会话变量,则告诉index.php显示#box。
我的评论“表单”在show.php上,它只包含一个普通的文本区域和一个提交按钮。现在它通过一个JS脚本存储消息,该脚本将其全部传递给字符串,insert.php将正常的mysql查询插入数据库,并存储会话变量。 (源代码如下)
这是一些编码: session.php文件:
<?php
session_start();
if(isset($_SESSION['user_message'])) {
echo 1;
}
?>
index.php中的div框:
<div id='box' onclick="closeNotice()" style="display: none">
Hey, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?>
<a href="#" class="close-notify" onclick="closeNotice()">X</a>
</div>
<?php
$_SESSION["user_message"] = null;
?>
刷新每1秒的ajax脚本(我现在正在使用):
function checkSession(){
$.ajax({url: "session.php", success: function(data){
if( data == 1){
$('#box').show();
}else{
$('#box').hide();
}
}});
}
setInterval('checkSession()',1000);
将字符串传递给insert.php的脚本,该注释将注释插入数据库:
var nocache = 0;
function insert() {
document.getElementById('insert_response').innerHTML = "Please Wait .. "
var fID= encodeURI(document.getElementById('fID').value);
var kommentar= encodeURI(document.getElementById('kommentar').value);
nocache = Math.random();
http.open('get', 'insert.php?fID='+fID+'&kommentar=' +kommentar+'&nocache = '+nocache);
http.onreadystatechange = insertReply;
http.send(null);
}
function insertReply() {
if(http.readyState == 4){
var response = http.responseText;
document.getElementById('insert_response').innerHTML = ''+response;
}
}
show.php上的表格:
<div id="insert_response">
</div>
<form action="javascript:insert()" method="post">
<textarea id="kommentar" name="kommentar"></textarea><br />
<input type="hidden" name="fID" id="fID" value="<? echo $_GET["id"]; ?>" />
<input type="submit" name="Submit" value="Sæt ind!"/>
</form>
答案 0 :(得分:0)
为什么不用你的$ .ajax调用将dataType设置为“script” - 并且让$ .ajax方法调用的php脚本生成相应的javascript来插入/删除/显示/隐藏/修改页面上的项目相应?
我认为你过度思考这个问题,在这种情况下我认为使用会话也是不必要的......如果可能的话,我会尽量避免这种情况。
在这里看看 - http://api.jquery.com/jQuery.ajax/ - 在参数“dataType”中找到特定参数“script”,我想你会发现它对你要完成的任务有所帮助。
答案 1 :(得分:0)
除非您希望邮件保留在多个页面中,否则不需要会话。
如果您在按提交后尝试将用户发送到另一个页面,请将ajax响应存储到隐藏的输入中,并使用$ _POST来检索它。
如果是同一页面,只需将ajax响应保存到框中并调用box.show()即可显示。
好?
答案 2 :(得分:-1)
我认为您需要comet来摆脱请求。但是,我自己并没有使用它,我对它知之甚少,所以我无法真正帮助你。