为什么声明对象会使我的 Ajax 页面中的 HTML 无效


Why does declaring objects voids the HTML in my Ajax page?

背景:我正在构建一个Ajax页面,该页面将由用户的浏览器调用以检索已经在$_SESSION中加载的数据。我想测试Ajax页面是否正常工作,所以我正在尝试对其进行print_r($_SESSION)。(注意:print_r()在主站点上运行良好。

问题:我无法让我的 PHP 生成有效的 HTML。如果我这样做:

<?php
  header("Content-Type: text/html; charset=utf-8");
  echo '<?xml version="1.0" encoding="utf-8" ?>';
  if (!session_id()) {
    session_start();
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- See http://www.w3.org/International/O-charset.en.php-->
    <title>Test for Ajax</title>
    <link rel="stylesheet" media="screen" type="text/css" title="StyleSheetProjet" href="StyleSheetProjet.css" />
  </head>
  <body>
      <pre>
      Content of $_SESSION:
      <?php print_r($_SESSION) ?>
      </pre>
  </body>
</html>

在这种情况下,页面将显示:

Content of $_SESSION:
Array
(

后跟一堆__PHP_Incomplete_Class Object(因为我假设会话中的对象尚未声明)。

但是,如果我从以下方面开始:

header("Content-Type: text/html; charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8" ?>';
//Obects in session:
require_once("Class_User.php");
require_once ('Class_Message.php');
if (!session_id()) {
  session_start();
}
//(Rest is same as above)

然后浏览器什么都不渲染,甚至不Content of $_SESSION:.事实上,Web 控制台中的 html 只是<html><head></head><body></body></html>,中间没有任何内容......

我做错了什么?

编辑 1:将header()中的text/xml替换为 text/html

编辑 2:我将两个require_once替换为:

if (file_exists('Class_User.php')) {
  echo "Class_User exists";
} else {
  echo "Class_User doesn't exist";
}
if (file_exists('Class_Message.php')) {
  echo "Class_Message exists";
} else {
  echo "Class_Message doesn't exist";
}

该页面确实返回Class_User existsClass_Message exists因此可以清楚地找到文件。

疑似原因

require_once("Class_User.php");require_once("Class_Message.php");正在寻找相关文件,找不到它们,因此请停止执行其余代码。检查Class_User.phpClass_Message.php的路径是否正确。

实际原因(我们发现在调试后与 OP 一起工作)

其中一个类文件正在扩展另一个类,由于该文件未包含在项目中,因此执行被阻止。OP通过为这第三堂课打电话给另一个require()解决了这个问题。