Php包括使用ajax内容加载导致加载时间缓慢

时间:2012-06-15 16:59:06

标签: php jquery ajax class include

我目前正在研究this website,我需要一些关于php和ajax的帮助。 如果这是一个简单的解决方案,我道歉,但我到处寻找,我找不到解决方案。

无论如何,左边的链接用ajax加载右边的内容。这很容易。 'gallery'下的子链接加载了一个像这样的php文件:

<?php
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$category = new category();
$categories = $category->loadAbstract();
?>
<div id="image_gallery">
<?php 
foreach ($categories as $category) {
    if ($category->hasAlbums()) {
        foreach ($category->albums as $album) {
            echo '<div class="album_container">';
                echo '<div class="sublinks" onClick="loadAlbum(\''.$album->getId().'\')">
                        <h4>'.$album->getName().'</h4>
                    </div>';
        }
    }
}
?>
</div>
<script>
    function loadAlbum(Id) {
        $.ajax({
            type: 'POST',
            url: 'loadalbum.php',
            data: "selectedAlbum="+Id,
            success: function(result) {
                        $("#"+Id).html(result);
                    }
        });
</script>

显然,这会调用loadalbum.php,我必须添加相同的内容:

<?php 
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$selectedAlbum=$_POST['selectedAlbum'];
?>

问题在于,每当我在左侧选择不同的类别时,它必须调用这些类,然后当从该类别中选择一个相册时,将再次调用这些类。这会大大减慢加载时间,因为它必须继续从数据库中检索数据。

如果已加载相册,我会使用一些javascript来阻止它加载相册,但只要在左侧选择了不同的链接,它就会回到原点。

有没有办法在网页打开时加载我的所有类,然后在我的php文件通过ajax加载时引用它们?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要重新定义您的实体关系。根据您的代码:类别,相册和图像都具有相同的地位。我不认为这是真的,但这不是我的设计。无论如何,请将您的模型包含在控制器类中

<?php
require_once "classes/album.class.php";
require_once "classes/category.class.php";
require_once "classes/images.class.php";

class Controller
{
  public $album;
  public $image;
  public $category;

  public function __construct()
  {
   $this->album = new Album();
   $this->image = new Image();
   $this->category= new Category();
  }

  public invoke(){
    $categories = $this->category->loadAbstract();
    include "path-to-gallery.php";
  }
}

现在,在您的控制器中,您可以访问所有模型。将数据操作函数放在模型类中,并从控制器中调用它们。包含的页面将预先加载$ categories数据。然后,您可以在视图中循环浏览它。

两个重要注意事项:1)要求运行时存在必须的文件。如果他们不这样做,你会收到致命的错误。包含只会发出警告,可能会被抑制,2)要求和包括语言结构,而不是方法。括号是不必要的。

我已经为您的控制器类提供了基本大纲。我的方式只是数百个其他MVC实现中的一个。许多人会争论我写的更精彩的观点。别担心。试着了解我提供的基础知识。如果它有帮助,那很好。一定要接受答案。如果没有,那就忽略它。

祝你好运。