首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >页面在ajax工作时冻结。

页面在ajax工作时冻结。
EN

Stack Overflow用户
提问于 2013-10-11 11:44:52
回答 2查看 5.6K关注 0票数 1

当我在jquery中使用ajax时,页面会在ajax工作时冻结,然后在3-4秒后收到数据。我将ajax函数的时间间隔设置为几秒钟后一次又一次地运行,这使得我的页面非常慢。

我怎么才能阻止这一切?

下面给出了我使用的代码。

代码语言:javascript
复制
    function show_clt() {
        $.ajaxSetup({
            async: true
        });
        $.ajax({
            type: "GET",
            url: "online_clients.php",
            //data: dataString,
            cache: false,
            success: function(html) {
                $("#online_clients").html(html);
            } 
        });
        var dataString = "e_id=<?=$employer_id; ?>";            
        $.ajax({
            type: "GET",
            url: "online_employer.php",
            data: dataString,
            cache: false,
            success: function(html){
                $("#online_employer").html(html);
            }
        });
    }

    show_clt();
    setInterval(function() {
        $.ajaxSetup({
            async: true
        });
        //var di_scroll = $('#client_main').scrollTop(); alert(di_scroll);

        $.ajax({
            type: "POST",
            url: "online_clients.php",
            //data: dataString,
            cache: false,
            success: function(html) {
                $("#online_clients").html(html);
                //$('#client_main').scrollTop(60);
            } 
        });
        var dataString = "e_id=<?=$employer_id; ?>";
        $.ajax({
            type: "POST",
            url: "online_employer.php",
            data: dataString,
            cache: false,
            success: function(html) {
                $("#online_employer").html(html);
            }
        });
    }, 9000);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-11 12:16:05

您的代码将一直在执行ajax函数,不管它们是否已经完成,如果这些查询需要很长时间才能完成,那么可能会有很多查询同时运行。

下面的代码将链接查询,以便它们只运行一次前面的查询已经完成。

代码语言:javascript
复制
    function show_clt() {
        $.ajaxSetup({
            async: true
        });
        $.ajax({
            type: "GET",
            url: "online_clients.php",
            //data: dataString,
            cache: false,
            success: function(html) {
                $("#online_clients").html(html);
            }
        }).done(function(msg) {
            var dataString = "e_id=<?=$employer_id; ?>";            
            $.ajax({
                type: "GET",
                url: "online_employer.php",
                data: dataString,
                cache: false,
                success: function(html){
                    $("#online_employer").html(html);
                }
            }).done(function(msg) {
                setTimeout(function(){ show_clt() }, 9000);
            });
        });
    }

    show_clt();

使用.done()对象的jQuery Ajax函数,我们可以执行下一个命令。当下一个命令完成后,我们调用这个函数的.done()函数,并设置一个9秒的超时来重新调用整个函数。

唯一的问题是数据不是每9秒刷新一次,而是每9秒+1次ajax响应时间+2次ajax响应时间刷新一次。取决于ajax查询的速度,所需时间不应该很明显,最终将在10-11秒左右结束。

票数 0
EN

Stack Overflow用户

发布于 2013-10-11 11:49:06

这很可能与AJAX调用本身无关。如果您尝试从成功函数中删除所有$("#online_clients").html(html);等代码,我认为实际的问题就会消失。

也就是说,正是实际的HTML重新定位和更新使浏览器“冻结”,直到它能够重新填充和重新显示页面。因为您同时执行3-4个这样的调用,所以这种行为是可以预料的。

我的建议是,只更新你真正需要的和当你真的需要它。可能会链接这些AJAX调用,这样它们就不会在一起启动,在它们之间造成人为的停顿,或者只是根据需要更新页面上的一些元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19317366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档