You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fullcalendar.io加载大量事件时触发失败函数的问题求助

排查FullCalendar事件加载失败问题的方案

一、先获取详细错误信息

FullCalendar的failure回调提供了错误参数,修改前端代码即可拿到具体错误内容:

修改前端events配置中的failure函数:

events: {
    url: 'events.php',
    failure: function(errorObj, responseText) {
        document.getElementById('script-warning').style.display = 'block';
        // 打印详细错误到控制台,方便定位
        console.error('日历加载失败详情:', errorObj);
        console.error('后端返回内容:', responseText);
    }
}

打开浏览器控制台(F12),触发错误时就能看到具体错误类型(比如JSON解析失败、HTTP请求错误)和后端返回的原始内容。

二、排查后端接口问题

1. 直接验证接口输出

在浏览器地址栏直接访问events.php?start=2024-05-01&end=2024-05-31(替换为实际测试的日期范围),检查返回内容:

  • 如果返回内容不是纯JSON(比如开头有PHP警告、错误提示),说明PHP代码报错破坏了JSON格式;
  • 复制返回内容到浏览器控制台执行JSON.parse(返回内容),如果报错,说明JSON格式不合法(比如未转义的特殊字符、语法错误)。

2. 优化后端代码,增加错误处理

修改后端events.php,增强错误捕获和数据安全性:

header('Content-Type: application/json');
include("config.php");

// 处理请求参数,避免非法值
$start = isset($_GET['start']) ? $_GET['start'] : '';
$end = isset($_GET['end']) ? $_GET['end'] : '';
$startTimestamp = strtotime($start);
$endTimestamp = strtotime($end);

// 使用预处理语句,避免SQL注入和字符串拼接错误
$sql = "SELECT `start`, `end`, `title`, `description` FROM " . $SETTINGS["data_table"] . " 
        WHERE UNIX_TIMESTAMP(`start`) >= ? AND UNIX_TIMESTAMP(`start`) <= ? LIMIT 100";

$stmt = $mysqli->prepare($sql);
if (!$stmt) {
    http_response_code(500);
    echo json_encode(['error' => '数据库预处理失败: ' . $mysqli->error]);
    exit;
}

$stmt->bind_param("ii", $startTimestamp, $endTimestamp);
$stmt->execute();
$result = $stmt->get_result();

$arr = [];
while ($row = $result->fetch_assoc()) {
    // 处理NULL字段,避免JSON编码异常
    foreach ($row as $key => $value) {
        $row[$key] = $value ?? '';
    }
    $arr[] = $row;
}

$json = json_encode($arr);
if ($json === false) {
    http_response_code(500);
    echo json_encode(['error' => 'JSON编码失败: ' . json_last_error_msg()]);
} else {
    echo $json;
}

这段代码的关键优化:

  • 用预处理语句替代字符串拼接,避免SQL注入和语法错误;
  • 自动转换NULL字段为空字符串,避免JSON编码失败;
  • 捕获JSON编码错误,返回明确的错误信息。

3. 检查PHP错误日志

查看服务器的PHP错误日志(通常在/var/log/php/目录,或虚拟主机的日志管理面板),排查是否存在数据库查询错误、函数调用异常(比如strtotime处理无效日期)等问题。

三、排查数据格式问题

  1. 日期格式验证:确保数据库中start和end字段是合法的日期格式(比如YYYY-MM-DD或YYYY-MM-DD HH:MM:SS),FullCalendar对日期格式有严格要求,非法格式会导致加载失败;
  2. 特殊字符处理:检查description或title字段是否包含未转义的特殊字符(比如换行、双引号、反斜杠),这类字符会破坏JSON结构,导致前端解析失败。

四、网络请求排查

打开浏览器开发者工具的Network标签,找到events.php的请求:

  • 查看状态码:500表示后端服务器报错,400表示请求参数有误,200但JSON解析失败说明返回的JSON不合法;
  • 查看Response标签:直接查看后端返回的原始内容,确认是否有PHP错误提示或无效JSON。

内容的提问来源于stack exchange,提问作者chocwithstarfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:39:18