当通过Ajax发送请求时,如何停止挂起页面

时间:2014-09-24 04:38:08

标签: javascript php jquery ajax

我正面临一个严重的问题......每当我使用Ajax发送请求并获得响应时,我的浏览器被绞死..并且显示没有加载等...

但是当我从Ajax检索到响应时,浏览器和页面再次开始工作......

以下是我使用的代码.....

function ShowContestStatus(contestID)
{
    $("#showContestDetails").html('<div class="loadercontest"><img src="assets/images/loading.gif">Loading Contest....</div>');

    $("#RadioGroup1_0, #RadioGroup1_1, #RadioGroup1_2").prop('disabled', true);
    $.ajax({
            url:"process/processMyContest.php",
            type:'POST',
            cache:false,
            async:false,
            data : {act : 'showcontest', cid : contestID },
            success:function(result)
            { 
                $("#showContestDetails").html(result);
                $("#RadioGroup1_0, #RadioGroup1_1, #RadioGroup1_2").prop('disabled', false);
            }
        });
    }

请帮助我...我希望得到与其他网站相同的响应,当您发送请求并且他们正在使用ajax页面既没有绞死也像滚动等每个处理都可见..... 。

所以请建议我好主意....所以我可以摆脱它,让我的ajax顺利播放页面,而不会影响和刺激对方被吊死......

提前致谢...:)

2 个答案:

答案 0 :(得分:3)

问题是async:false ...由于您的ajax请求是同步的,脚本执行将等待请求完成以继续..

由于浏览器使用单线程执行模式(它将执行脚本或重绘或一次等待用户事件 - 不是所有的同时),您的浏览器选项卡将停止监听用户(因此它看起来像它被绞死了)

function ShowContestStatus(contestID) {
    $("#showContestDetails").html('<div class="loadercontest"><img src="assets/images/loading.gif">Loading Contest....</div>');

    $("#RadioGroup1_0, #RadioGroup1_1, #RadioGroup1_2").prop('disabled', true);
    $.ajax({
        url: "process/processMyContest.php",
        type: 'POST',
        cache: false,
        //remove async: false,
        data: {
            act: 'showcontest',
            cid: contestID
        },
        success: function (result) {
            $("#showContestDetails").html(result);
            $("#RadioGroup1_0, #RadioGroup1_1, #RadioGroup1_2").prop('disabled', false);
        }
    });
}

Ajax.async

  

默认情况下,所有请求都是异步发送的(即设置为   默认为true)。如果需要同步请求,请将此选项设置为   假。跨域请求和dataType:“jsonp”请求没有   支持同步操作。 请注意,同步请求可能会   暂时锁定浏览器,在请求时禁用任何操作   活跃。从jQuery 1.8开始,使用async:false和jqXHR   ($ .Deferred)已弃用;你必须使用成功/错误/完成   回调选项而不是jqXHR的相应方法   对象如jqXHR.done()或不推荐使用的jqXHR.success()。

答案 1 :(得分:0)

make async:true表示浏览器在运行ajax代码时监听其他事件。