无限滚动MySQL PHP jQuery
下面的代码显示了jQuery和php的无限滚动函数。我有两个问题我似乎无法解决 我的第一个问题:我知道,这叫做“无限”滚动。但可笑的是,当向下滚动到页面底部时加载的内容实际上是“无限的”(重复本身,而我实际上不想要任何重复)。我认为这与jQuery函数中的if语句有关 以下是jQuery部分:无限滚动MySQL PHP jQuery,php,jquery,mysql,Php,Jquery,Mysql,下面的代码显示了jQuery和php的无限滚动函数。我有两个问题我似乎无法解决 我的第一个问题:我知道,这叫做“无限”滚动。但可笑的是,当向下滚动到页面底部时加载的内容实际上是“无限的”(重复本身,而我实际上不想要任何重复)。我认为这与jQuery函数中的if语句有关 以下是jQuery部分: jQuery.fn.portfolio_addon = function(addon_options) { "use strict"; //Set Variables var addon_el = jQu
jQuery.fn.portfolio_addon = function(addon_options) {
"use strict";
//Set Variables
var addon_el = jQuery(this),
addon_base = this,
img_count = addon_options.items.length,
img_per_load = addon_options.load_count,
$newEls = '',
loaded_object = '',
$container = jQuery('.image-grid');
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()) {
$newEls = '';
loaded_object = '';
var loaded_images = $container.find('.added').size();
if ((img_count - loaded_images) > img_per_load) {
var now_load = img_per_load;
} else {
var now_load = img_count - loaded_images;
}
if ((loaded_images + now_load) == img_count) jQuery(this).fadeOut();
if (loaded_images < 1) {
var i_start = 1;
} else {
var i_start = loaded_images+1;
}
if (now_load > 0) {
// load more elements
for (var i = i_start-1; i < i_start+now_load-1; i++) {
loaded_object = loaded_object + '<div data-category="'+ addon_options.items[i].category +' " class="blogpost_preview_fw element '+ addon_options.items[i].category +'"><div class="fw_preview_wrapper"><div class="gallery_item_wrapper"><a href="'+ addon_options.items[i].url +'" ><img src="'+ addon_options.items[i].src +'" alt="" class="fw_featured_image" width="540"><div class="gallery_fadder"></div><span class="third_party_'+addon_options.items[i].thirdparty +'"></span><span class="third_party_mobile_'+addon_options.items[i].thirdparty_mobile +'"></span><span class="description_tag"><span class="actual_description">'+ addon_options.items[i].title +'</span></span> <span class="price_tag"><span class="actual_price">€ '+ addon_options.items[i].price +'</a></div><a href="'+ addon_options.items[i].url +'"><div class="grid-port-cont"><h6>'+ addon_options.items[i].title +'</h6><hr class="trennlinie"><span>'+ addon_options.items[i].description +'</span><hr class="trennlinie"><span>Preis: EUR '+ addon_options.items[i].price +'</span> · <span>Ort: '+ addon_options.items[i].postcode +' '+ addon_options.items[i].city +'</span></div></a></div></div></div></div>';
}
$newEls = jQuery(loaded_object);
$container.isotope('insert', $newEls, function() {
$container.isotope('reLayout');
});
}}
});
}
jQuery.fn.portfolio\u加载项=函数(加载项选项){
“严格使用”;
//设置变量
var addon_el=jQuery(此),
addon_base=this,
img\u count=加载项\u选项.items.length,
img_per_load=加载选项。加载计数,
$newEls='',
已加载的_对象=“”,
$container=jQuery('.image grid');
$(窗口)。滚动(函数(){
if($(窗口).scrollTop()+$(窗口).height()==$(文档).height()){
$newEls='';
加载的_对象=“”;
var loaded_images=$container.find('.added').size();
if((img\u计数-加载的图像)>每个加载的img\u){
var now_load=每_load的img_;
}否则{
var now_load=img_count-加载的图像;
}
if((加载的图片+现在加载)=img\u计数)jQuery(this.fadeOut();
如果(加载的图像<1){
var i_start=1;
}否则{
var i_start=加载的_图像+1;
}
如果(现在加载>0){
//加载更多元素
对于(变量i=i_start-1;i
这是我的php的一部分:
<?php // load more on default
if($condition == true){
//connect to the database
//-select the database to use
$start1 = 40; // it starts at 40 because 40 items load when page loads
$limit1 = 20;
//-query the database table
$sql="SELECT * FROM table WHERE City LIKE '%".$featured."%' order by id limit $start1,$limit1";
//-run the query against the mysql query function
//-create while loop and loop through result set
//-assign &numrows variable
?>
<script>
items_set = [
{src : '<?php echo $row['imageURL']; ?>',
url : '<?php echo $row['URL']; ?>',
category: '<?php echo $row['DetailCategory']; ?>',
title : '<?php echo $row['Name']; ?>',
description : '<?php echo $row['Description']; ?>',
price : '<?php echo $row['Price']; ?>',
postcode : '<?php echo $row['Postcode']; ?>',
city : '<?php echo $row['City']; ?>',
thirdparty : '<?php echo $row['ThirdParty']; ?>',
thirdparty_mobile : '<?php echo $row['Thirdparty']; ?>'}
];
jQuery('#list').portfolio_addon({
load_count : <?php echo $numrows;?>,
items : items_set
});
</script>
<?php
}}
?>
这是我的第二个问题:我的数据库中正好有49个项目(行)。如代码所示,页面加载时已经显示了其中的40个。现在,当我向下滚动页面(触发器加载功能)时,只会显示6个新项目,而应该显示9个项目(所有49个项目都应该使用我正在使用的查询进行调用)。不知何故,mysql查询似乎根本没有任何效果
我真的非常感谢你的帮助!谢谢。我希望我做对了: 同样的内容被反复加载 我认为这个问题是由于:
loaded_object = loaded_object + 'lots of more content';
在你的循环中。
每次加载的对象都会在新内容前面附加自身,然后再附加到dom
您只想要您的:
loaded_object = 'lots of more content';
待加载。。旧的东西在DOM中已准备就绪,不需要成为“加载的\u对象”的一部分
编辑:
正如MarcB在下面的问题中所评论的那样:select语句也在一次又一次地获取相同的数据,我认为没有ajax请求。您需要发送一个ajax请求,其偏移量为完成多少篇文章以及需要获取多少篇文章
请给出您的评论您直接将PHP中的数据转储到JS上下文中。您面临着引入JS语法错误并杀死整个JS代码块的巨大风险。永远不要直接倾倒。始终通过
json\u encode()
输出,因此您可以始终生成语法正确的JS。它还可以无限重复,因为在两次提取调用之间您不会更改$start/$限制。您每次只是获取/显示相同的记录。您的滚动条必须发送“获取第40-49页”、“获取第50-59页”、“获取第60-69页”等信息。。。每个time@MarcB这看起来像是“初稿”。。。因此,他可能正在构建某种东西的原型,以了解如何使其工作;)@马尔克:谢谢!这肯定只是一个原型,这里什么都没有完成,但你是对的!我只是想知道如何只获取40-49页,这样在这些页面加载后,当滚动到底部时,就不会出现更多的新内容了……也许他是在请求index.php?featured='something'。。。加载图像并在每次页面加载时最多显示20个。在这种情况下,他不需要任何ajax,你能告诉我这个ajax请求的外观吗?谢谢谢谢仅删除“加载的_对象”并不能做到这一点,您是对的(@MarcB)。如果我只想加载这9个项目一次,没有更多的页面,你能告诉我它应该是什么样子吗?谢谢!也许可以重新考虑一下您的客户机和服务器策略。。。正如Rajesh在他的帖子中提到的,处理一些ajax请求可能是有用的。您应该考虑创建一个RESTful服务,然后与您的客户交谈