加载 gif 会在代码执行时“冻结”
Loading gif "freezes" when code is executing
我正在附加一个动画 gif,它是一个加载栏。gif 在代码的前面定义,然后我只执行以下操作。
document.getElementById("loading").style.display = "inline";
//some if statements.
do_ajax(params);
ajax 调用看起来像...
var uri = getURL(params);
var xhr = new XMLHttpRequest();
xhr.open("POST",uri,false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.send(null);
以显示加载 GIF。然后,我执行一些检查(if 语句),然后执行 AJAX 请求。但是,gif 在执行所有这些代码时冻结,只有在代码完成执行后才开始"移动"。这是为什么呢?如何解决此问题?
我正在使用 Chrome 11
您正在使用同步 XHR。这将在等待请求完成时锁定浏览器。显然,它会导致严重的 UI 问题。
尝试异步。将open()
的第 3 个参数设置为 true
。您还需要分配readystatechange
事件并侦听成功。
延伸阅读。
我想只要确保你使用的是异步:true
$("#wait").show(); //SHOW WAIT IMG
$.ajax({
url: 'process.php', //server script to process data
type: 'POST',
async: true, // <<<<< MAKE SURE IT'S TRUE
data: { data1: "y", data2: "m", data3: "x" },
complete: function() {
$("#wait").hide();
},
success: function(result) {
//do something
}
});
您是否希望在同步 ajax 请求运行时看到加载.gif?
同步 ajax 请求会完全锁定大多数浏览器的 UI,从而阻止显示您所做的任何更改,直到请求完成。
如果要在请求运行时看到加载.gif请将其设置为异步:
//--- js code
document.getElementById("loading").style.display = "inline";
//--- js code
var uri = getURL(params);
xmlhttp.open("POST", uri, true);
xmlhttp.onreadystatechange = handleReadyStateChange;
xmlhttp.send(null);
function handleReadyStateChange() {
if (xmlhttp.readyState == 4) {
// Request Complete
}
}
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 在哪里使用名为“;冻结”;
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- AJAX 调用在获得响应并成功执行时会冻结浏览器一段时间
- 仅限Chrome:ajax冻结了我的JavaScript执行
- 如何在不冻结浏览器的情况下执行大量javascript代码
- 执行流星重置时,登录用户的应用程序页面冻结
- 为什么在执行许多ajax请求时浏览器会冻结
- Internet Explorer在执行鼠标单击+拖动操作时冻结.如何检测其原因
- 加载 gif 会在代码执行时“冻结”
- jQuery $.get 冻结执行