我将 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();
那么,有什么想法、建议吗?我将永远感激不已。提前致谢!!!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我修复了更改 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); }; //};