使用 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 中,如何防止在选项卡更改、表单更改等时对已检索到的图像发出新的网络请求

如何让 jQuery 执行同步而不是异步的 Ajax 请求?

如何防止 favicon.ico 请求?

jQuery对ajax的封装部分详解和案例