You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FullCalendar无法通过PHP加载MySQL事件:解析脚本内容而非输出的原因及解决方法

解决FullCalendar加载PHP JSON数据时解析失败(返回PHP代码而非JSON)的问题

看起来你遇到的核心问题是Web服务器没有正确解析你的PHP文件,而是直接把PHP源码返回给了浏览器,这才导致FullCalendar拿到的不是预期的JSON数据,触发了JSON解析失败的警告。

问题原因分析

你在终端里执行PHP脚本能得到正确的JSON,是因为终端直接调用了PHP解释器来执行代码;但通过浏览器访问时,Web服务器(比如Apache、Nginx)没有配置成将.php文件交给PHP解释器处理,而是把它当成普通的文本文件返回,所以FullCalendar收到的是一堆PHP代码,自然无法解析成JSON。

解决步骤

1. 检查Web服务器的PHP解析配置

这是最关键的一步,不同服务器的配置方式略有不同:

  • Apache服务器

    • 确保mod_php模块已经启用(可以通过apachectl -M命令查看,输出里有php_module就说明已启用)
    • 在Apache的配置文件(比如httpd.conf或虚拟主机配置文件)中,确保有正确的PHP文件关联规则:
      AddType application/x-httpd-php .php
      
    • 确认你的PHP文件所在的目录被允许执行脚本,配置中要有类似AllowOverride AllOptions ExecCGI的设置。
  • Nginx服务器

    • 确保已经安装并启动了PHP-FPM服务
    • 在Nginx的server配置块中,添加处理PHP文件的规则:
      location ~ \.php$ {
          root           /path/to/your/web/root;
          fastcgi_pass   127.0.0.1:9000; # 或unix:/run/php-fpm/www.sock,取决于你的PHP-FPM配置
          fastcgi_index  index.php;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          include        fastcgi_params;
      }
      

2. 验证PHP文件的访问有效性

在浏览器地址栏直接输入get-events.php的完整URL(比如http://localhost/get-events.php),如果页面显示的是干净的JSON字符串,说明服务器配置已经正常;如果还是显示PHP代码,那说明服务器配置还没调整好,需要再检查上面的步骤。

3. 优化PHP脚本的响应头(可选但推荐)

在你的get-events.php中,输出JSON之前加上Content-Type头,明确告诉浏览器返回的是JSON数据,避免可能的MIME类型识别问题:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "database";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT Title as title, Start as start, End as end FROM event_table";
$result = mysqli_query($conn, $sql);
$myArray = array();

if ($result -> num_rows > 0) {
  while($row = $result -> fetch_assoc()) {
    $myArray[] = $row;
  }
}

// 添加JSON响应头
header('Content-Type: application/json');
print json_encode($myArray);
?>

4. 确认FullCalendar的事件路径正确

确保events: "get-events.php"中的路径是相对于当前index.html的正确路径,如果get-events.php在子目录里,要写成events: "/subfolder/get-events.php"(绝对路径)或者对应的相对路径。

完成这些步骤后,FullCalendar应该就能正确加载并解析PHP返回的JSON数据了。

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

火山引擎 最新活动