搜索

首页  >  问答  >  正文

更新选择选项后重新加载 FullCalendar V5 事件

我将 FullCalendar 与包含事件信息的数据库一起使用,除了数据库中的正常信息之外,我有一列是医生,另一列是城市,所以我使用 MVC php mysql 工作我的 fullcalendar 5。我对日历做了很多更改并且正在工作。

我在日历顶部、日历外部添加了两个选择,我喜欢的是,当我更改选择(例如选择一名医生)时,日历有一个 refetchEvents(),当然仅显示来自的事件这些医生,当我将其置于空白时,选择显示所有事件,或者如果我选择另一位医生,则显示他唯一的事件。

在某些时候,我的代码可以正常工作,只是日历不刷新,我的意思是calendar.refetchEvents();什么也不做。

这些是我的js代码:

sedegeneral.addEventListener("click", clicksede);
    function clicksede(){
    sedegeneral.addEventListener("change", clicksede2);
        function clicksede2(){
        const sedegeneral1 = document.getElementById('sedegeneral').value;
        const doctorseleccionado1 = document.getElementById('doctorseleccionado').value;
        //alert("Alert 1");
        //calendar.refetchEvents();
        //alert("Estamos a que el doc es: "+doctorseleccionado1+" Y la sede escogida es: "+sedegeneral1);
            const url = base_url + 'Home/listar';
            const http = new XMLHttpRequest();
            http.open("POST", url, true);
            http.send(new FormData(frmflt));
            http.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {
                    console.log(this.responseText);
                    const res = JSON.parse(this.responseText);
                     Swal.fire(
                         'Avisos?',
                         res.msg,
                         res.tipo
                     )
                    if (res.estado) {
                        eventSource.remove()
                        //calendar.getEventSources()
                        calendar.addEventSource(res)
                        calendar.refetchEvents();
                        calendar.render();
                    }
                }
            }

        sedegeneral.removeEventListener("change", clicksede2);
        };
    };

这些是我的控制器功能:

public function listar()
    {
        $doctor = $_POST['doctorselecionado'];
        //$doctor = '';
        //$doctor = 'guti';
        $sede = $_POST['sedegeneral'];
        //$sede =  '';
        //$sede =  'dentalsoftweb';
        //$sede =  'guti';

        $data = $this->model->getEventos($doctor,$sede);
        echo json_encode($data);
        die();
    }

这些是我的模型函数:

public function getEventos($doctor,$sede)
    {
        $where_sql = ''; 
        //if(!empty($_GET['start']) && !empty($_GET['end'])){$where_sql .= " WHERE start BETWEEN '".$_GET['start']."' AND '".$_GET['end']."' ";}
        if(!empty($_GET['start']) && !empty($_GET['end'])){$where_sql .= " AND start BETWEEN '".$_GET['start']."' AND '".$_GET['end']."' ";}

        //$sql = "SELECT id,title, CONCAT(start,'T',startTime) as start, CONCAT(start,'T',endTime) as end, color, duracioncita, finalidad, resultado, observaciones, start as fechacita, startTime as horacita FROM evento $where_sql";
        $sql = "SELECT id,title, CONCAT(start,'T',startTime) as start, CONCAT(start,'T',endTime) as end, color, duracioncita, finalidad, resultado, observaciones, start as fechacita, startTime as horacita FROM evento WHERE lastuser LIKE '%$doctor%' AND lastusermodif LIKE '%$sede%' $where_sql";
        $array = array($doctor);
        return $this->selectAll($sql, $array);
    }

所以当我尝试时,我看到在我的控制台中工作正常(php ajax),所以当我启动日历时显示所有事件,当然选择选项是空白的,当我更改选择时(例如.doctor),在控制台中向我显示医生事件,但在日历中不要重新加载新数据。因此,在图像中,正如您在一个选择中看到的那样,带来了所有数据,而在另一个选择中(当我更改选择时,选择一位医生)只给我带来了他的事件,所以这些事件较少,但只有我可以在控制台,日历不执行任何刷新操作。

我添加代码的图像,我之前编写的代码(控制器):

我添加了代码的图像,我之前写的代码(JS):

有趣的是,如果我忽略选择,并在线修改我的代码(控制器),日历就会刷新,所以我认为我的问题出在我的 JS 中。我认为与以下内容有关:

eventSource.remove()
calendar.getEventSources()
calendar.addEventSource(res)
calendar.refetchEvents();

那么,有什么想法、建议吗?我将永远感激不已。提前致谢!!!

P粉195402292P粉195402292274 天前535

全部回复(1)我来回复

  • P粉237125700

    P粉2371257002024-03-28 00:40:38

    我修复了更改 JS 代码,如下所示:

    //sedegeneral.addEventListener("click", clicksede);
    //function clicksede(){
    sedegeneral.addEventListener("change", clicksede2);
        function clicksede2(){
        const sedegeneral1 = document.getElementById('sedegeneral').value;
        const doctorseleccionado1 = document.getElementById('doctorseleccionado').value;
            const url = base_url + 'Home/listar';
            const http = new XMLHttpRequest();
            http.open("POST", url, true);
            http.send(new FormData(frmflt));
            http.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {
                    console.log(this.responseText);
                    const ressede = JSON.parse(this.responseText);
                     Swal.fire(
                         'Filtrando Sede '+sedegeneral1+' y el doctor '+doctorseleccionado1,
                         //ressede.msg,
                         //ressede.tipo
                     )
                        calendar.removeAllEvents();
                        calendar.addEventSource(ressede)
                }
            }
        sedegeneral.removeEventListener("change", clicksede2);
        };
    //};

    回复
    0
  • 取消回复