异步AJAX调用冻结页面

时间:2015-08-19 01:46:48

标签: javascript jquery ajax wordpress

一位客户最近就我几个月前开发和安装的网站上的新问题与我联系。希望对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秒或更长时间,然后最终加载新帖子。

以下是我所知道的:

  • 这在Firefox或桌面Safari中不会发生。
  • 我在自己的服务器上重新设置了由相同代码运行的开发站点。在任何浏览器中查看此站点时不会发生此问题。 (See for yourself
  • 客户端不知道具体是什么时候开始发生的,所以我不确定它是否是Wordpress或插件更新的结果(尽管在开发站点上的测试似乎排除了这一点)。

正如我之前所说,AJAX不是我熟悉的东西。鉴于其许多具体条件,我不确定从何处开始诊断此问题。任何指导将不胜感激。提前谢谢你:)

1 个答案:

答案 0 :(得分:0)

如果您使用的是jQuery 1.5或更高版本,它将为您提供另一种方法来解决此问题。这是使用Deferred和Promise进行异步调用。

Avoiding nested asynchronous calls in JS

Understanding JQuery.Deferred and Promise

希望这有帮助。