[英]JQuery: Why does ajax request execute before code in beforeSend finishes executing?
这是我的代码。 基本上,在发送ajax请求以重新加载数据之前,我想在页面上开始播放Reload.gif。 但是最终发生的事情是它只会在调用我的成功函数后才开始播放。 时间线如下所示:
0:00秒:1登录到控制台
0:00秒:2已登录控制台
0:10秒:3登录到控制台
0:10秒:GIF开始播放。
这没有道理,是将img的src设置为async还是其他? 图片代码:
<img id="reloadIcon" src="/img/Reload.png" style="width: 25px; height: 25px"/>
jQuery.ajax({
url: url,
type: 'GET',
timeout: 20000,
beforeSend: function() {
console.log(1);
document.getElementById('reloadIcon').src = "/img/Reload.gif";
console.log(2);
},
success: function (result) {
console.log(3);
}
});
在$.ajax()
调用之前加载图像。 切换CSS display
的属性的<img>
在元件beforeSend
而不是改变的功能, .src
所述的<img>
的元素。
jQuery.ajax({
url: url,
type: 'GET',
timeout: 20000,
beforeSend: function() {
console.log(1);
document.getElementById('reloadIcon').style.display = "block";
console.log(2);
},
success: function (result) {
document.getElementById('reloadIcon').style.display = "none";
console.log(3);
}
, error: function() {
document.getElementById('reloadIcon').style.display = "none";
}
});
通过更改“ src”来获取图像是异步的,我认为您可以在页面加载时设置src,但是使图像元素不可见。 并在ajax开始时将图像设置为可见。
如果更改src属性,则浏览器必须完成一堆事情,例如在其缓存中查找图像,可能会重新请求图像,解析,aso
其次,您的JS代码与许多其他事情共享一个线程。 浏览器倾向于在内部缓存CSS分配并首先执行以下JS代码,只要先丢失然后缓存的更改就不会影响代码的功能。 如果在这种情况下要强制分配,请阅读特定的CSS属性,浏览器将在之前分配更改。 我倾向于指出(未经测试),属性上也有这种行为。
在这种情况下,最佳实践是guest271314的帖子,隐藏并显示外部容器要更快,更可靠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.