Ajax:在成功将数据保存到数据库后,在另一页面上显示通知

时间:2010-02-22 22:17:20

标签: php ajax

我已经准备了一段时间了,我想做的事情。 我想要做的是在顶部显示一条消息(确认,“你已经获得了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>

3 个答案:

答案 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来摆脱请求。但是,我自己并没有使用它,我对它知之甚少,所以我无法真正帮助你。