【发布时间】:2014-05-26 16:47:05
【问题描述】:
我正在使用jQuery Waypoints 插件在用户到达页面底部时触发某些内容。一旦用户到达页面底部,就会触发 AJAX 调用,我会收到 JSON 响应。完成此操作后,页面大小会增加,这意味着我们不再位于页面底部(内容被添加到页面中),但即使在底部,Waypoints 插件仍然会重复 AJAX 调用两次或三次页面的位置已经不存在了,它远低于...
这是我正在努力解决的问题。我尝试了很多我想到的想法,但没有一个奏效。这就是我使用 Waypoints 插件的方式:
var pop_loader = $('<br /><div class="loading row" style="display: none;"><div class="col-lg-12 center">' +
generate_preloader(32, 3) + '</div></div><br />');
var pop_footer = $('.last-box-popular');
var pop_start = { from: 24 };
var pop_opts = { offset: '100%' };
pop_footer.waypoint(function(event, direction) {
var $boxCount = document.getElementsByClassName('image');
if ($boxCount.length < 24){
return false;
}
pop_footer.waypoint('destroy');
$('.loadMore').append(pop_loader);
$('.loading').fadeIn('slow');
delay('pop', function(){
$.ajax({
type: 'GET',
url: 'image.php?action=fetchMore&start=' + pop_start.from,
success: function(data){
try {
var response = $.parseJSON(data);
} catch (e) {
display_alert(lang.L_TPL_AJAX_CATCH, 'danger', 3000, 'top');
return false;
}
if ('error' in response || $.isEmptyObject(response.images)) {
pop_loader.hide();
return false;
}
pop_start.from += 24;
pop_loader.detach();
pop_footer.waypoint(pop_opts);
// Remove previous last class
$('.image').removeClass('last-box-popular');
var imagesLength = response.images.length - 1;
for (var key in response.images)
{
var image = response.images[key];
var imageHTML = '<span class="image' + ((imagesLength == key) ? ' last-box-popular' : '') + '">';
imageHTML += '<div class="topleft-corner">';
imageHTML += '<div class="dropdown">';
imageHTML += '<span class="icon-share dropdown-toggle" id="share-dropdown" data-toggle="dropdown"></span>';
imageHTML += '<ul class="dropdown-menu share-dropdown" role="menu" aria-labelledby="share-dropdown">';
imageHTML += '<li role="presentation">';
imageHTML += '<a href="' + generate_site_url() + 'store/t/' + image.image_name + '.' + image.image_extension + '" class="facebook_share" href="#" role="menuitem" tabindex="-1">';
imageHTML += '<span class="icon-facebook-circled-2"></span> Facebook';
imageHTML += '</a>';
imageHTML += '</li>';
imageHTML += '<li role="presentation">';
imageHTML += '<a href="http://twitter.com/share?url=' + generate_site_url() + 'store/t/' + image.image_name + '.' + image.image_extension + '&text=Shared via @IMGzer - " class="twitter_share" role="menuitem" tabindex="-1">';
imageHTML += '<span class="icon-twitter"></span> Twitter';
imageHTML += '</a>';
imageHTML += '</li>';
imageHTML += '<li role="presentation">';
imageHTML += '<a href="https://plus.google.com/share?url=' + generate_site_url() + 'store/t/' + image.image_name + '.' + image.image_extension + '" class="google_share" role="menuitem" tabindex="-1" href="#">';
imageHTML += '<span class="icon-gplus-circled-1"></span> Google+';
imageHTML += '</a>';
imageHTML += '</li>';
imageHTML += '</ul>';
imageHTML += '</div>';
imageHTML += '</div>';
imageHTML += '<div class="topright-corner">';
imageHTML += '<span class="glyphicon glyphicon-minus-sign" title="Report" data-placement="left" data-toggle="modal" data-target="#report" data-report="image" data-reference="' + image.image_name + '"></span>';
imageHTML += '</div>';
imageHTML += '<section class="row">';
imageHTML += '<div class="col-lg-12 center upload-output">';
imageHTML += '<br /><br />';
imageHTML += '<div class="img-container">';
imageHTML += '<div class="helper"></div>';
imageHTML += '<a href="' + generate_site_url() + 'image/' + image.image_name + '">';
imageHTML += '<img src="' + generate_site_url() + 'store/t/' + image.image_name + '.' + image.image_extension + '" class="img-thumbnail">';
imageHTML += '</a>';
imageHTML += '</div>';
imageHTML += '<br />';
imageHTML += '<span class="small">Uploaded ' + image.upload_time + ' by <strong>' + ((image.username == null || image.username == '') ? 'a guest' : '<a href="' + generate_site_url() + 'user/' + image.username + '">' + image.username + '</a>') + '</strong></span>';
imageHTML += '<br />';
imageHTML += '<span class="label label-success"><span class="glyphicon glyphicon-thumbs-up"></span> ' + image.image_likes + '</span> ';
imageHTML += '<span class="label label-danger"><span class="glyphicon glyphicon-thumbs-down"></span> ' + image.image_dislikes + '</span> ';
imageHTML += '<span class="label label-warning"><span class="glyphicon glyphicon-heart"></span> ' + image.image_favorited + '</span>';
imageHTML += '</div>';
imageHTML += '</section>';
imageHTML += '</span> ';
$('.images').append(imageHTML);
$('.image').slideDown('fast');
}
}
});
}, average_ajax_delay);
}, pop_opts); // Popular
如何让 Waypoints 插件在到达底部时进行 一次 AJAX 调用。然后在到达“新”底部时进行另一个 AJAX 调用。
如果有任何其他需要使这个问题更清楚,请告诉我。
【问题讨论】:
-
您能否设置一个超时时间以确保它在设定的时间内不会多次调用?
标签: javascript jquery html ajax jquery-waypoints