Fullcalendar从php获取数据而不更新


$(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(。

相关内容

  • 没有找到相关文章

最新更新