【发布时间】:2016-04-02 06:51:43
【问题描述】:
我想使用 AJAX 向我的提要添加更多内容,它确实添加了内容 - 但它添加了两次。为了排除诸如 AJAX 请求被提交两次之类的原因,我添加了整数 i。但是如果我向下滚动,i 仅等于 1(如我的 h1 元素所述)。
AJAX success 函数接收一个 json 对象(我可以在警报中看到),然后将其转换为 html 两次(相同的对象和相应的 html)。你知道为什么会出现这个问题吗?
jQuery:
function loadMore()
{
var i = 0;
var accountpar = $(".parent").length;
$.ajax({
url: 'homemore.php',
type: 'post',
data: {
'account':accountpar
},
success: function(datanew) {
i++;
var datarec = datanew.replace(/},]$/,"}]");
var string = json2html.transform(datarec,template);
alert(string);
$(string).insertAfter($('.parent').last());
}
});
$(window).bind('scroll', bindScroll);
}
function bindScroll(){
if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
$(window).unbind('scroll');
loadMore();
}
}
$(window).scroll(bindScroll);
【问题讨论】:
-
警告 var 字符串时会发生什么?也许它将字符串插入到多个 .parents 中?
-
@JamesG 警报只出现了两次。我认为这是因为滚动的原因......因为如果我真的很小心并一点一点向下滚动,警报只会显示一次,因此内容也只会添加一次......
-
@Moritz 你必须绑定滚动事件两次。你能告诉我们完整的代码吗?
-
@Moritz 如果这是完整的代码那么你什么时候第一次绑定滚动事件?它只在 loadMore 函数内部,没有其他地方。我错过了什么吗?
-
@Moritz 太棒了!!现在试试这个,删除
bindScroll函数中的unbind行,同时删除loadMore中的bind行代码,现在试试。