一位客户最近就我几个月前开发和安装的网站上的新问题与我联系。希望对AJAX内部工作有更多了解的人可以帮助我。
在this page上,当用户滚动到页面底部以检索更多帖子并将其附加到列表时,将进行AJAX调用。它背后的代码相对简单:
function getnextposts() {
$.ajax({
async: true,
type: "GET",
url: "http://fitzpatrickmusic.net/wp-admin/admin-ajax.php",
dataType: "html",
data: ({ action: 'getNextPosts', counter: pagecounter, postsretrieve: posts_retrieve }),
success: function(data) {
$("#loadingindicator").fadeOut(250);
if ( $(data).length == 0 ) {
$("#nomoreposts").delay(500).fadeIn(250);
} else {
$(data).hide().appendTo('.edd_downloads_list');
download_list_filter_check();
download_list_length_check();
$(window).data('ajaxready', true);
}
},
error: function() {
$("#loadingindicator").fadeOut(250);
$("#errorretrieve").delay(500).fadeIn(250);
return false;
}
});
download_list_filter_check()
和download_list_length_check()
是辅助函数,允许AJAX调用在数据库中循环并应用自定义过滤器。
如果您在Chrome,IE或移动版Safari中访问此页面,并尝试通过滚动到列表底部来激活此功能,您会发现问题:该功能短暂运行,然后整个网站冻结了到10秒或更长时间,然后最终加载新帖子。
以下是我所知道的:
正如我之前所说,AJAX不是我熟悉的东西。鉴于其许多具体条件,我不确定从何处开始诊断此问题。任何指导将不胜感激。提前谢谢你:)
答案 0 :(得分:0)
如果您使用的是jQuery 1.5或更高版本,它将为您提供另一种方法来解决此问题。这是使用Deferred和Promise进行异步调用。
Avoiding nested asynchronous calls in JS
Understanding JQuery.Deferred and Promise
希望这有帮助。