【发布时间】:2012-02-18 17:13:41
【问题描述】:
我在这里真的很痛苦,试图让这个 ajax 调用工作,对于这个问题的庞大性感到抱歉。
用户单击一个按钮,这将启动一个 ajax 调用以向数据库添加投票。这是名为“addvote.php”的文件:
<?php
session_start();
/* COOKIECHECK START */
setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
}
if(count($_COOKIE) > 0){
$cookies=1;
} else {
$cookies=0;
}
/* COOKIECHECK END */
if($cookies==1) {
$id=$_GET["id"];
$vId="v".$id;
if (((isset($_SESSION[$vId]) && ((time() - $_SESSION[$vId]) > 180))) || (!isset($_SESSION[$vId]))) {
// last vote was more than 3 minutes ago
$_SESSION[$vId] = time(); // update/create vote time stamp
//ADD VOTE TO DATABASE
}
else {
echo "You've voted on this already";
}
}
else {
echo "Please enable cookies to make your vote count";
}
?>
应该发生什么:检查用户是否启用了 cookie。如果是,则允许他们添加投票,如果不是,则告诉他们启用 cookie。如果他们启用了 cookie,但他们还没有投票 - 添加投票,如果他们已经投票,请告诉他们。
实际发生的情况: 尚未投票的用户单击按钮,这将启动 ajax 调用并成功添加投票,不会向用户发送任何消息。然后他们转到另一个问题并单击投票按钮,“addvote.php”被启动,但这次它返回“你已经对此投票”并添加投票!这让我觉得页面调用运行了两次,首先它添加投票,然后再次尝试(并返回错误)。
可能和header()有关??
然后每个问题都会返回相同的消息并添加投票 - 除非我等待一段时间,然后它在第一个问题上起作用,并且同样的事情再次发生。
注意点是: GET 变量与标题一起传递,以便我知道他们在谈论哪个问题以及他们是否单击了“否”或“是”。
再次道歉,这个问题太可怕了。
【问题讨论】: