我制作了一个包含许多个别阶段的小游戏 - 当第一阶段完成时,它会前进到第二阶段,然后是三阶段,依此类推,直到达到一个条件,结束游戏并开始新的。
如果满足某个条件,我使用以下jQuery AJAX刷新游戏的页面(update()检查下一阶段是否有时间,并刷新()如果是这样做的话:
<script>
function refresh() {
$.ajax({
type: 'POST',
url: 'index.php',
data: 'refresh=true',
timeout: 0,
success: function(data) {
$("#current_game").html(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#notice_div").html('Error contacting server. Retrying in 60 seconds.');
window.setTimeout(update, 60000);
}
});
};
function update() {
$.ajax({
type: 'POST',
url: 'check_time.php',
data: 'checktime=true',
timeout: 0,
success: function(data) {
$(".time_remaining").html(data);
window.setTimeout(update, 1000);
var time = data;
if(time<=0)
{
$(".time_remaining").html("Reloading the page now.");
$(".time_remaining_end").html("Reloading the page now.");
refresh();
}
else
{
$(".time_remaining").html("There are "+data+" seconds remaining in this phase." );
$(".time_remaining_end").html("There are "+data+" seconds until the next game." );
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#notice_div").html('Error contacting server. Retrying in 60 seconds.');
window.setTimeout(update, 60000);
}
});
};
$(document).ready(update);
</script>
现在,我正在缓存游戏参数。每次阶段进展时游戏参数都会改变,所以我需要删除那个缓存文件cache_game.php。
我试图通过在每次调用phase_up()函数时删除缓存来执行此操作,使用(为了清晰度极其简化)脚本(适用于我的$ cache类):
<?php
function phase_up()
{
global $db, $cache;
if(condition1)
{
...;
}
else
{
if(condition2)
{
...;
}
else
{
...;
exit;
}
$sql = "UPDATE games
SET phase_details = ...
WHERE game_id = ...";
$db->query($sql);
}
$cache->delete('game');
}
?>
然而,当我的AJAX通过index.php调用它时,它并没有推进阶段。手动刷新页面确实可以推进这个阶段。
AJAX只是告诉index.php调用phase_up()。