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

时间:2016-02-01 20:46:21

标签: php html ajax

背景:我正在构建一个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:用text/xml替换header()中的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,因此它可以清楚地找到文件。

1 个答案:

答案 0 :(得分:1)

怀疑原因

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

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

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