- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 ajax/php 的新手,所以我想找出最好的方法。
我有一个包含 1500 个项目的 sql 数据库,我正在加载到我的页面中。我想将 30 个项目加载到页面中,然后当用户到达网页底部时,我希望它再加载 30 个项目。
到目前为止,我的网页上显示了 30 个项目,并有一个下拉菜单可以过滤这些项目。我还有一个在用户到达页面底部时触发的函数。
任何人都可以帮助我使用 PHP 脚本来完成这项工作并加载更多项目吗?我正在使用的代码如下。
谢谢
HTML
<section id="filters">
<select name="entries" onchange="filterEntries()">
<option value="*">show all</option>
<option value=".item323">323</option>
<option value=".item266">266</option>
<option value=".item277">277</option>
<option value=".item289">289</option>
</select>
</section> <!-- #filters -->
<div id="entries" class="clearfix">
<div class="ajaxloader"><img src="<?php bloginfo('template_url'); ?>/ajax_load.gif" alt="loading..." /></div><!--ajaxloader-->
</div><!--entries-->
<div class="ajaxloader"><img src="<?php bloginfo('template_url'); ?>/ajax_load.gif" alt="loading..." /></div><!--ajaxloader-->
Jquery
$(document).ready(function () {
loadData();
//Hide Loader for Infinite Scroll
$('div.ajaxloader').hide();
});
function loadData () {
//Show Loader for main content
$('#entries .ajaxloader').show();
//Pull in data from database
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
"use strict";
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState===4 && xmlhttp.status===200) {
document.getElementById("entries").innerHTML=xmlhttp.responseText;
//Fire filter function once data loaded
filterEntries();
//Hide Loader for main content once loaded
$('#entries .ajaxloader').hide();
}
}
xmlhttp.open("POST","<?php bloginfo('template_url'); ?>/getentries.php?$number",true);
xmlhttp.send();
};
//Isotope filter
function filterEntries () {
var $container = $('#entries');
$select = $('#filters select');
$container.isotope({
itemSelector : '.item'
});
$select.change(function() {
var filters = $(this).val();
$container.isotope({
filter: filters
});
});
};
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
$('div.ajaxloader').show('slow');
//alert("Function to load more entries");
}
});
PHP
<?php
//Connect to Database
$con = mysql_connect("localhost", "root", "root");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("awards", $con);
$sql="SELECT * FROM entry WHERE status = 'registered' ORDER BY `entry_id` LIMIT 0, 30";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
//Get award cat ids
$awardcat = $row['awards_subcategory_id'] ;
print "<div class='item item$awardcat clearfix'>";//add award cat id to each div
print '<img class="image" src="http://localhost:8888/awardsite/wp-content/themes/award/placeholder.jpg" />';
print "<p > Studio: " . $row['studio'] . "</p>";
print "<p class='client'> Client: " . $row['client'] . "</p>";
print "<p class='description'> Description: " . $row['description'] . "</p>";
print "<p class='solutionprocess'> Solution Process: " . $row['solution_process'] . "</p>";
print "</div>";
}
mysql_close($con);
?>
最佳答案
这是一个相当复杂的问题。在尝试从头开始编写您自己的变体之前,我建议您看一下 Infinite Scroll jQuery Plugin .如果这不能解决问题,这里有一个可能的解决方案:
Javascript
$(document).ready(function () {
loadData( 0 );
//Hide Loader for Infinite Scroll
$('div.ajaxloader').hide();
});
function loadData ( last_id ) {
var $entries = $('#entries'),
$loader = $('.ajaxloader', $entries).show();
$.get( '/getentries.php', { last_id : last_id }, function( data ) {
$entries.append( data ).append( $loader.hide() );
filterEntries();
});
};
//Isotope filter - no changes to this code so I didn't include it
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
$('div.ajaxloader').show('slow');
loadData( $( '#entries item:last' ).data('id') )
}
});
PHP
<?php
//Connect to Database
$con = new mysqli( 'localhost', 'root', 'root', 'awards' );
if( $con->connect_errno ) {
die( 'Could not connect:' . $con->connect_error );
}
$last_id = isset( $_GET['last_id'] ) ? (int)$_GET['last_id'] : 0;
$stmt = $con->prepare( 'SELECT * FROM entry WHERE status = "registered" AND entry_id > (?) ORDER BY entry_id LIMIT 0, 30' );
$stmt->bind_param( 'i', $last_id );
$stmt->execute();
$result = $stmt->get_result();
while( $row = $result->fetch_assoc() ) {
//Get award cat ids
$awardcat = $row['awards_subcategory_id'];
print "<div class='item item$awardcat clearfix' data-id='" . $row['entry_id'] . "'>";//add award cat id to each div
print '<img class="image" src="http://localhost:8888/awardsite/wp-content/themes/award/placeholder.jpg" />';
print "<p > Studio: " . $row['studio'] . "</p>";
print "<p class='client'> Client: " . $row['client'] . "</p>";
print "<p class='description'> Description: " . $row['description'] . "</p>";
print "<p class='solutionprocess'> Solution Process: " . $row['solution_process'] . "</p>";
print "</div>";
}
$con->close();
Javascript 代码将 AJAX GET 请求发送到 php 脚本,其中包含列表中显示的最后一个条目的 ID。然后 PHP 脚本返回该 ID 之后的 30 个条目。原始的 Javascript 文件中有一些 PHP 代码。我删除了它,因为我不知道它的目的是什么(你是从 PHP 脚本输出 JS 吗?)。此外,整个 XMLHttpRequest
代码可以缩短为 $.get()
函数。无论如何你都在使用 jQuery,所以你不需要重新发明轮子。我使用 data-id
属性来传输条目 ID。这是 HTML5 特定的属性。如果您不想使用它,只需使用 id
即可,但请记住,id 不能以数字开头 - 您应该在它前面加上一个字母。
在 PHP 脚本中,我使用了 mysqli
而不是 mysql_*
函数。从现在开始,您应该使用 mysqli
或 PDO
,因为它们比(现已弃用)mysql_*
更可靠、更安全。您的 PHP 安装很可能已经包含这些扩展。请注意,我没有处理数据库查询错误。您可以自己编写该代码。如果您遇到其他类型的错误,请在此处发布它们,我会尝试修复它们。
关于php - 从数据库加载更多项目 ~ Infinite Scroll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878365/
我正在使用 NDK 为 Android 编写一个实用程序。 在我的实用程序中,我 fork 了一个进程,并在该进程中运行以下代码: //Screenshot thread int i = 0; for
我是 React 新手,正在构建一个表单。该表单由多个组件组成的集合组成。组件之一是文本字段。 我想创建一个按钮,只需单击即可添加无限数量的相同文本字段组件。我对如何执行此操作感到困惑,并且在网上找不
我需要每 5 秒无限地写入一个文件 (.txt)这是我的代码: #include #include #include #include #include using namespace st
出于好奇,是 全部 无限循环不好? 如果您运行无限循环,会发生什么不良影响和后果? 另外,如果它们不全是坏的,您能否举一些例子,它们何时可以用于有意义的目的? 他们是否需要关闭实例?例如,我们总是在
下面是我的智能合约。当我将它放入混音中时,我会收到有关以下每个功能的警告。 函数 MedicalRecord.addNote(bytes32,bytes32) 的 Gas 要求高:无限。 函数 Med
CPDT的第三章简要讨论了为什么Coq中禁止使用负感应类型。如果我们有 Inductive term : Set := | App : term -> term -> term | Abs : (te
我有一个包含 6 个页面且启用分页的 UICollectionView 和一个 UIPageControl。我想要的是,当我来到最后一页时,如果我向右拖动,UICollectionView 会从第一页
如何以编程方式在 Excel 工作表中创建“无限”符号? 最好来自 Java...但也欢迎其他提示。 谢谢。 最佳答案 “无穷大符号”字符位于 unicode 的代码点 0x221E 中。执行此操作的
如果我想迭代值 0 到 255 并且我使用无符号字节作为计数器,当计数器达到 255 时返回到 0 并进行无限循环。 for (ubyte i = 0; i < ubyte.max; i++)
如果需要全部32位来存储从-2^31到2^31,它如何存储+和-无穷大?它使用更多内存吗?存储这些值是否良好且安全? 更新:感谢答案,我知道只有 float 据类型可以存储 Inf 值,整数不能。 最
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在下面的设置中,如何绘制一条通过两点的“无限”线? var context = document.getElementById("canvas").getContext("2d"); var poin
我正在测试一个简单的汇编函数 (SPARC)。该函数如下,应该有两个参数,x 和 *str,并计算 x 在 *str 中出现的次数。但是,该函数会导致无限循环。我正在使用 C 来调用汇编函数,这也在下
我有很多内容要在网站上显示,因此我需要使用“无限”滚动解决方案,当用户滚动到当前加载内容的末尾时加载内容。但是,我确切地知道有多少数据,我希望用户对此有所了解。我不喜欢滚动条如何让你看起来快到内容的末
我想实现无限滚动。下面是我的布局的简短形式。因为我有一些相对定位的元素,javascript 滚动事件不会触发。 如何解决此问题才能触发滚动事件并实现无限滚动? 我的主要布局是:
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭3年前。 Improve th
如何定义类型 InfiniteFunction ,这是一个函数,调用时返回另一个 InfiniteFunction 类型看起来像: () => () => () => ... // infinite
我正在尝试为此模式创建匹配项: /page/some/thing/is/written/here 其中/page 将始终匹配 a-zA-Z0-9 并且/page 之后的所有内容都可以包含字符 a-zA
我正在使用一个“通用”js 片段,它应该检测用户是否滚动到文档底部: $(window).scroll(function() { if ($(window).scrollTop()
当我尝试初始化 Fabric ui 日期选择器字段的值时,我收到 @@redux-form/INITIALIZE 消息的无限循环 function mapStateToProps(state) {
我是一名优秀的程序员,十分优秀!