Javascript ';查看更多信息';从数据库中显示的每100篇文章的php页面链接
我有一个PHP页面,它从DB表中提取数据,并输出echo。但是,当表列大约为1000到5000或更多时,页面加载速度太慢,需要几分钟的时间 我试图在页面底部添加一个查看更多链接,每点击100篇文章,查看更多链接就会显示另外100篇文章 我知道由于某些原因我不想采用分页方式。 希望我能清楚地解释我的情况 我的代码如下:Javascript ';查看更多信息';从数据库中显示的每100篇文章的php页面链接,javascript,php,mysqli,Javascript,Php,Mysqli,我有一个PHP页面,它从DB表中提取数据,并输出echo。但是,当表列大约为1000到5000或更多时,页面加载速度太慢,需要几分钟的时间 我试图在页面底部添加一个查看更多链接,每点击100篇文章,查看更多链接就会显示另外100篇文章 我知道由于某些原因我不想采用分页方式。 希望我能清楚地解释我的情况 我的代码如下: <html> <head> <?php include('db.php'); ?> </head> <body>
<html>
<head>
<?php include('db.php'); ?>
</head>
<body>
<?php
$page = 0;
if(isset($_GET["Page"])){
$page = $_GET["Page"];
}
$sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$number = $row2["id_msg"];
?>
<?php
$sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while($row3 = $result3->fetch_assoc()) {
$member = $row3["id_member"];
$replies = $row3["id_topic"];
?>
<script>
var page = 0;
function GetData(){
page++;
var xhr = new XMLHttpRequest();
xhr.open('GET', "/getData?page="+page, true);
xhr.send();
xhr.onreadystatechange = processRequest;
function processRequest(e) {
if (xhr.readyState == 4) {
<?php echo substr($row3['body'], 0, 150); ?>
}
}
}
</script>
<?php }
} else {
echo "";
}
?>
<?php }
} else {
echo "";
}
?>
<div onclick="GetData()">Show More</div>
</body>
</html>
修改您的查询以包含一个“页面”计数器,该计数器将作为“显示更多”的点击次数来计算查询的偏移量
$page = 0;
if(isset($_GET["Page"])){
$page = $_GET["Page"];
}
"SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
现在,JavaScript,向php页面发出请求,我称之为“getData”,并在计数器中包含Get参数
var page = 0;
function GetData(){
page++;
var xhr = new XMLHttpRequest();
xhr.open('GET', "/getData?page="+page, true);
xhr.send();
xhr.onreadystatechange = processRequest;
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
// Append the results here.
}
}
}
您希望在每次单击DOM时都运行此函数
<div onclick="GetData()">Show More</div>
您可以使用document.body.innerHTML+=
因此,您的最终函数现在将变为
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
document.body.innerHTML += xhr.responseText;
}
}
我在php文件中添加了结束括号,以结束while循环和if语句。
如果不想使用括号,则需要确保从未打开过括号以避免语法错误,如果不将括号放在括号中,则只有下一行对应于loop/If语句,以防您不知道
快乐学习。如果你使用关键词“分页”,你应该能够找到足够多的原理解释。如果您不想转到不同的结果“页面”,而是将新条目附加到当前页面的现有条目下,那么将AJAX加入其中。嘿,谢谢您的时间。我试过你的方法,但我好像错过了什么。。请检查更新的问题。谢谢等待您的答复。@HarishKolliparat是的,您没有将数据添加到页面本身。。。查看注释“//将结果附加到此处”。您还需要将php分离到单独的文件中,否则将把整个HTML文档附加到文档中。您甚至没有更改Ajax url。正如我所说的,我不会用勺子喂你完整的代码,做点努力吧。你已经需要做一些小的改变了。很抱歉打扰你,基本上,我是一名化学工程师。这是我个人的兴趣。请看更新的问题。到目前为止,这是我所理解的。再次感谢您的时间。@HarishKolliparat答案是正确的,但您必须使用JavaScript附加结果。当页面加载时,PHP在服务器上运行,您需要客户端代码来处理AJAX结果。@HarishKolliparat请参阅我的编辑。我还介绍了如何集成“动态”加载内容的其他信息。
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
// Append the results here.
}
}
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
document.body.innerHTML += xhr.responseText;
}
}