$(document).ready(function() {
redo(1);
$("select").change(function () {
var str = "";
$("select option:selected").each(function () {
str = $(this).val() + " ";
});
console.log(str);
redo(str);
});
// page is now ready, initialize the calendar...
function redo(t) {
$.getJSON("getPrenotazioni.php",{action:"date","cameraid":t}, function(data){
$('#calendar').html("");
console.log(data);
$('#calendar').fullCalendar( 'rerenderEvents' );
$('#calendar').fullCalendar({
editable: false,
events: data,
color: 'yellow', // a non-ajax option
textColor: 'black' // a non-ajax option
});
});
$('#calendar').fullCalendar( 'refetchEvents' );
}
});
PHP代码是:
<?php
$d = getVids($db,'ji_prenotazione','da_data,a_data','WHERE cameraid='.$_GET['cameraid']);
switch ($_GET['action'])
{
case 'date':
if (count($d)>0) {
for($i=0;$i<count($d);$i++)
{
$str[] = array('title' => utf8_encode('xxx'),'start'=>$d[$i]['da_data']."T08:30",'end'=>$d[$i]['a_data']."T08:30");
}
}
else
$str[] = array('title' => '','start'=>'','end'=>'');
$json = array('events'=>($str));
break;
}
echo json_encode($json);
?>
这似乎有效,但如果我在数据库中更改了一些内容,例如,如果我删除所有条目并刷新网页,则以前的值仍在日历中。
我错过了什么?
我之所以问您使用的是什么浏览器,是因为在执行AJaX请求时,所有浏览器的行为都不同。基本上,浏览器会侦听请求响应中的几个"头"。其中一个"头"设置了下载数据的截止日期,但您没有设置(假设这是完整的代码(。如果你一直在同一个URL上请求数据,你会得到"缓存"的结果,而不是新的结果。
每次强制浏览器请求新数据可以通过PHP使用header()
函数来完成注意在将任何输出发送到浏览器之前,必须调用此函数。你必须包括的标题如下:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
第一个标头(显然(会告诉浏览器在每次请求时重新验证内容,第二个标头会立即使缓存无效(在旧浏览器中使用(。
另一种选择是使用Javascript而不是PHP来更改每个请求的URL。这不是最好的选择,因为它会在每次重新加载页面时创建新的缓存数据,但它会起作用。您可以通过添加一些随机URL数据(如"getPrenotazioni.php?id=" + Math.random()
(来实现这一点。
请注意我不确定这是否是您的问题,但可能是考虑到您提供的代码。您可以在进行更改后,通过在IE(或您已经打开的任何其他浏览器(中打开页面来检查这一点,并查看不同浏览器之间的页面是否不同。或者,您可以在进行更改后加载页面,如果没有任何更改,则清除缓存并重新加载(CTRL + F5
(。