使用 jQuery 发出同步请求时,如何防止浏览器锁定(或显示等待符号)?
Posted
技术标签:
【中文标题】使用 jQuery 发出同步请求时,如何防止浏览器锁定(或显示等待符号)?【英文标题】:How can I keep the browser from locking up (or show wait symbol) when making a synchronous request with jQuery? 【发布时间】:2011-03-24 00:50:21 【问题描述】:函数使用jquery.ajax()
方法从服务器获取数据并将其用作返回值。
如果我使用 async=true 该函数会过早地返回空值。
如果我使用 async=false 等待函数的时间太长了。我尝试在请求之前切换显示旋转时钟的 div,但在请求结束之前 div 不会出现。
关于如何不锁定浏览器或显示等待图标/符号/文本的任何建议?
【问题讨论】:
async=true
请求有什么问题?你能告诉我们你的代码吗?
这是1000行代码:) Async true 过早返回,后续函数获取空对象
Stop browser locking during (synchronous) Ajax?的可能重复
【参考方案1】:
你不能。同步请求将锁定浏览器,包括您可能正在进行的任何动画或可能未决的 dom 修改 - 这就是不鼓励它们的原因。很有可能,您正试图从触发 ajax 请求的函数中返回一个值,这对异步请求不起作用 - 修改您的逻辑以处理成功回调中的响应处理,一切都会好起来的......
【讨论】:
关于 jquery 处理来自 php mysql 查询的异步响应的任何好的资源? @selytch:这与 PHP 或 MySQL 无关;这就是必须始终处理异步调用的方式:调用后您希望发生的所有事情都需要从回调中触发。请参阅:***.com/questions/2851952/… 或 ***.com/questions/31129/… 或 ***.com/questions/402503/… ...【参考方案2】:为了不锁定浏览器,您应该使用异步请求,也许您的代码或 ajax 响应需要重构。
但如果你仍然不想使用异步请求,你可以这样做:
-
插入旋转时钟并显示
准备就绪(我的意思是回调)后,发出 ajax 请求
最后,去掉时钟
【讨论】:
服务器响应 JSON 对象,我理解(如果我错了,请纠正我),需要 SYNC。我也很难计划如何处理对象数组的 ASYNC 响应...如果我放 $('#wait').show('fast',function () $.ajax ....) 浏览器( Chrome)仍然拒绝显示#wait until request is complete。 我已经多次使用默认异步模式的 json。我不明白为什么它需要同步。【参考方案3】:一种方法是放置图像(正在加载... gif 动画)。在发送 ajax 之前显示它。然后隐藏成功。如下所示。
$.ajax(
url: 'ajax/test.html',
beforeSend : function()
$('#LodingImg').show(); // show image..
,
success: function(data)
$('#LodingImg').hide(); // hide image
$('.result').html(data);
alert('Load was performed.');
);
【讨论】:
以上是关于使用 jQuery 发出同步请求时,如何防止浏览器锁定(或显示等待符号)?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Web 浏览器对缓存文件发出“If-Modified-Since”请求?
如何在没有 JQUERY 的情况下从浏览器扩展向 localhost 发出 POST 请求?
在 React/React Native 中,如何防止在选项卡更改、表单更改等时对已检索到的图像发出新的网络请求