我将 FullCalendar 与包含事件信息的数据库一起使用,除了数据库中的正常信息之外,我有一列是医生,另一列是城市,所以我使用 MVC php mysql 工作我的 fullcalendar 5。我对日历做了很多更改并且正在工作。
我在日历顶部、日历外部添加了两个选择,我喜欢的是,当我更改选择(例如选择一名医生)时,日历有一个 refetchEvents(),当然仅显示来自的事件这些医生,当我将其置于空白时,选择显示所有事件,或者如果我选择另一位医生,则显示他唯一的事件。
在某些时候,我的代码可以正常工作,只是日历不刷新,我的意思是calendar.refetchEvents();什么也不做。
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粉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); }; //};