我正在尝试为一些带有章节的书籍制作一个“幻灯片”浏览器。 “幻灯片”是存储在数据库中的大量HTML数据。一章可以包含50-100张幻灯片,但它们非常小(每张1-2 kB,有些是图片)。我希望用户可以点击上一张和下一张幻灯片的按钮,并最大限度地减少加载时间。
我现在拥有一个名为ContentFetcher.php的PHP页面,它只查询数据库以获取一张幻灯片(部分)的内容。
<?php
require_once 'Database.php';
echo Database::getInstance()->getSectionText($_GET["bookID"], $_GET["chapter"], $_GET["section"]);
?>
我的Javascript运行循环并使用$.get()
获取当前章节的每个部分:
$(function() {
<? $db = Database::getInstance(); ?>
var chapterSize = <?= $db->getChapterSize($this->bookID, $this->chapter) ?>;
var chapterContent = []; // this is where I want to store the contents
var currentSection = <?=$this->section;?>;
for (var i = 1; i <= chapterSize; i++) {
$.get("ContentFetcher.php", {
bookID : <?= $this->bookID ?>,
chapter : <?= $this->chapter ?>,
section : i
}, function(data) {
chapterContent.push(data);
});
}
$("#slides").html(chapterContent[currentSection]); // show the current slide
});
这是一个表现明智的好主意吗?如果是这样,我对JS闭包的理解还不是那么好 - 我如何在闭包中访问相同的chapterContent
?
答案 0 :(得分:2)
这个想法意味着您将在50到100个HTTP请求之间加载一个章节;这些都将在几乎同时完成。
因此,每当有人试图加载章节时,您的网络服务器将在几秒钟内收到100个请求 - 可能不是一个好主意。
在这种情况下,我可能会尝试实现这样的事情:
当然:
它会使您的客户端和服务器端代码更复杂,但它可能是最好的解决方案之一:
答案 1 :(得分:0)
不,这绝对不是一个好主意。我建议你只需要一个$ .get()请求来接收JSON数组中的所有记录。
关于闭包,你必须观看优秀的Douglas Crockfords的视频"The JavaScript Programming Language" (4 parts)。是的,闭包可以这样使用,它们很棒。