- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个脚本,当您触发它(通过单击链接)或滚动到页面底部时,该脚本会加载内容。我这样做是为了好玩,但它正在慢慢变成一场噩梦......触发的部分工作正常,而“滚动到底部”部分有时工作,有时不工作。它有时会加载一个帖子两次,有时会重复多组帖子(我一次加载 5 个)并且不显示下一组,我的猜测是因为它加载内容的速度太快了,即:
当你保持滚动条向下时,就会出现问题,因此它加载内容的速度非常快,这对于 Firefox 来说尤其是一个问题,因为如果你已经在底部并刷新页面,它将无限期地加载,直到出现没有更多的帖子了,而且,它的速度非常快。
我一整天都尝试了不同的方法......但我找不到解决方案。首先,我尝试设置一个标志,以便当每个 AJAX 调用完成时,它会根据加载的帖子数量增加某个变量,并且只有在数量增加的情况下才会再次执行调用,并且必须按顺序执行(其中在我看来意味着成功的 AJAX 调用)。这不起作用。
然后我尝试为 AJAX 调用设置超时,然后为包含该调用的函数设置超时,然后为首先执行该函数的函数(滚动到底部)设置超时,这种方法有效,但缺点是它在超时时间内不执行任何操作(因此,甚至不显示“正在加载”html),并且这种情况发生的次数较少,但仍然发生。我还尝试在 $.ajax() 函数中设置超时,我认为这是一种不同类型的超时,因为它没有达到我想要的效果...
最后,我尝试将 async 设置为 false,我认为这是一件坏事,因为它会挂起页面直到完成,而且它也已被弃用;不用说,它也不起作用(我没有注意到行为有任何明显的变化)。
我真的迷路了;我什至不确定为什么会发生这种“故障”......
这是我的代码...
$.ajax({ //Removed some code in order to make it brief
url: 'load.php',
type: 'post',
dataType: 'json',
data: {offset: countContent, limit: displayNumber},
success: function(data)
{
if(data)
{
for(var i=0;i<display_n;i++)
{
var title = data[i][1];
var author = data[i][2];
var img = data[i][3];
var date = data[i][4];
var htmlStr =
'<div class="post" id="'+i+'"></div>';
$(element).append(htmlStr);
$(element).children('#'+i+':last').hide().fadeIn(200+(i*250));
}
}
else if(data == null){
//Do something when there are no more posts
}
},
error: function() {
// Error
}
});
以及处理ajax调用的php
<?php
$offset = (int) $_POST['offset'];
$limit = (int) $_POST['limit'];
$db = 'mysql:host=localhost;dbname=posts;charset=utf8';
$u = 'username';
$p = 'password';
$con = new PDO($db,$u,$p);
$q = $con->prepare("SELECT id, title, author, img, date FROM articles
ORDER BY id DESC LIMIT :limit OFFSET :offset");
$q->bindParam(':offset',$offset,PDO::PARAM_INT);
$q->bindParam(':limit',$limit,PDO::PARAM_INT);
$q->execute();
$articles = $q->fetchAll(PDO::FETCH_NUM);
$con = null;
$array_count = count($articles);
if ($articles){
for ($i=0;$i<$array_count;$i++)
{
$articles[$i][4] = date("d F Y",strtotime($articles[$i]['4']));
}
echo json_encode($articles);
}
else
{
$articles = null; //sends null if the data is empty
echo json_encode($articles);
}
?>
有什么方法可以在执行另一个 ajax 调用之前“延迟”ajax 调用,以便正确加载文章吗?或者等到 ajax 中的所有内容都按计划加载后再进行下一个?这种情况我能做什么?
如果这篇文章有点大,我很抱歉,我想我想表达一个观点,哈哈。非常感谢您的帮助,谢谢。
编辑:这是我在下面发布的内容以及解决方案:
I set a global variable running to false, and wrapped the whole AJAX call inside an if !running condition, immediatly making the variable true after entering the loop, and making it false again on either the "complete: " parameter of the $.ajax function or via $.ajaxComplete(). I'm guessing one can also use .on() and .off() statements to bind and unbind the event trigger, but I found the previous method so much more simple.
这允许 AJAX 调用在另一个调用开始之前完成,并且内容可以正确显示。
最佳答案
我建议您在触发事件触发器后立即将其关闭,并在填充 DOM 后将其重新打开。
关于javascript - "infinite"滚动时 AJAX 数据加载不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836573/
我正在使用 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) {
我是一名优秀的程序员,十分优秀!