我正面临一个严重的问题......每当我使用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顺利播放页面,而不会影响和刺激对方被吊死......
提前致谢...:)
答案 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);
}
});
}
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假。跨域请求和dataType:“jsonp”请求没有 支持同步操作。 请注意,同步请求可能会 暂时锁定浏览器,在请求时禁用任何操作 活跃。从jQuery 1.8开始,使用async:false和jqXHR ($ .Deferred)已弃用;你必须使用成功/错误/完成 回调选项而不是jqXHR的相应方法 对象如jqXHR.done()或不推荐使用的jqXHR.success()。
答案 1 :(得分:0)
make async:true表示浏览器在运行ajax代码时监听其他事件。