【发布时间】:2015-08-25 10:35:05
【问题描述】:
我在这里编写了一个相当简单的函数。我正在使用 cookie 将用户限制为每天五票(并不完美,实际上很容易解决,但客户坚持认为,没有用户帐户,所以这是下一个最佳选择)。
所以,我在 Javascript 中使用 Ajax 调用来动态更改 Cookie - 每次用户单击“投票”按钮时,Ajax 都会与 PHP 文件对话,从而将 cookie 值减一。
但是发生了奇怪的延迟。我已经告诉 Ajax 控制台记录 cookie 值(在 PHP 文件中回显),并且在日志中我得到一个值的延迟。 cookie 从 5 开始,所以当我单击一次“投票”时,我应该得到一个 console.log 为“4”,因为该值减 1 然后记录。相反,我得到'5'。下一次,应该是'3',我得到'4',以此类推。
我的代码发布在下面。老实说,我不知道该怎么做——我已经从逻辑上考虑过代码,除非我的脑袋不工作,否则我看不出为什么这不起作用。
Ajax 调用:
$.ajax({
type: "GET",
url: "includes/user_vote.php",
success: function(data){
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown){
//log the error if the ajax function fails
console.log(textStatus);
console.log(errorThrown);
},
complete: function(data){
}
});
user_vote.php:
if($_COOKIE['votes_left'] <= 0){
$newVal = 0;
} else {
$newVal = $_COOKIE['votes_left'] - 1;
}
setcookie('votes_left', $newVal, strtotime('today 23:59'), "/");
echo $_COOKIE['votes_left'];
还有一点 PHP,与此没有直接关系,但无论如何都在这里发布。它在 index.php 上运行以设置 cookie(如果尚未设置)。
if(!isset($_COOKIE['votes_left'])){
$votes = 5;
$time = date('h:i:s');
setcookie('votes_left', $votes, strtotime('today 23:59'), "/");
setcookie('set_time', $time, strtotime('today 23:59'), "/");
}
【问题讨论】:
-
这全部是你的
PHP代码吗?如有更多请补充。 -
嘿 - 这是 user_vote.php 中的所有 PHP 代码。为什么,应该还有更多?
-
唯一的另一个 PHP 是在 index.php 中设置 cookie(如果尚未设置)。将其添加到主帖中。
-
呃。这是 cookie 的一个非常薄弱的问题。我想我可以做一个双 AJAX 调用,一次设置,再次查询。
-
或者您可以在执行检查时检查值 -1。有点脏,但它可以快速修复并且对服务器的请求更少。