显示“loading"只有当AJAX调用耗时超过500毫秒时才使用
Show "loading" box only if AJAX call takes more than 500 milliseconds
我试图使,当一个AJAX请求需要超过500毫秒,"加载"div显示。当请求完成后,div再次被隐藏。
我使用的代码如下。它应该起作用,但它没有。为什么呢?
var timer;
$(document).on({
ajaxStart: function () {
timer && clearTimeout(timer);
timer = setTimeout(function () {
$('#loading').show();
}, 500);
},
ajaxStop: function () {
clearTimeout(timer);
$('#loading').hide();
}
});
我建议您使用这些方法的文档用法,而不是on()
。这些是ajax事件,不是dom事件
$(document).ajaxStart( function () {
timer && clearTimeout(timer);
timer = setTimeout(function () {
$('#processing').show();
}, 500);
}).ajaxStop( function () {
clearTimeout(timer);
$('#processing').hide();
});
参考:$.ajaxStart() docs
如果您仍然有问题,请深入分析两个事件触发时间的差异
对我来说,你的代码工作得很好:
$(function() {
var timer, d;
$('#processing').hide();
$(document).on({
ajaxStart: function() {
console.log('started');
d = performance.now();
clearTimeout(timer);
timer = setTimeout(function() {
$('#processing').show();
}, 300);
},
ajaxStop: function() {
console.log('finished in ' + (performance.now() - d));
clearTimeout(timer);
$('#processing').hide();
}
});
$('#load').on('click', function(e) {
$.get('https://api.github.com/repos/joyent/node/issues?state=closed').then(function(res) {
$('#result').html('<pre>' + JSON.stringify(res, null, 2) + '</pre>');
});
});
$('#load2').on('click', function(e) {
$.get('https://api.github.com/repos/twbs/bootstrap/issues?state=closed').then(function(res) {
$('#result').html('<pre>' + JSON.stringify(res, null, 2) + '</pre>');
});
});
$('#load3').on('click', function(e) {
$.get('https://api.github.com/users/buzinas').then(function(res) {
$('#result').html('<pre>' + JSON.stringify(res, null, 2) + '</pre>');
});
});
$('#clear').on('click', function(e) {
$('#result').html('');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='load'>Load node.js closed issues</button><button id='load2'>Load Bootstrap closed issues</button><button id='load3'>Load Buzina's Github Profile</button><button id='clear'>Clear resuts</button>
<img id='processing' width="16" height="16" alt="star" src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7">
<div id="result"></div>
第一次尝试加载库时,它将花费超过300ms,并且将显示图像。第二次,它们将被浏览器缓存,并且将占用少于300ms的时间,而图像则不会。你可以看到控制台发生了什么。
可能,在你第一次尝试加载我的个人资料时,它将花费不到300ms,并且图像也不会显示。
注意:我已经更改为300ms
仅用于测试目的,因为也许更快的连接不会花费500ms来加载Github api。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 从javascript调用asmx服务时出现错误500
- 为什么500错误中断ajax调用
- 服务器仅在表单提交时调用 preventDefault 时返回 500 错误
- 在尝试将插入值从javascript调用到Visual Studio中的sql服务器时,收到内部服务器错误500
- 调用方法'updatePostData':内部服务器错误[500]
- 流星.调用方法'addToMenu':内部服务器错误[500]
- 显示“loading"只有当AJAX调用耗时超过500毫秒时才使用
- 使用Dojo.JsonRest调用grid.model.save()的gridx-lazyedit解析500 put响应
- Ajax对webmethod的调用导致ERROR 500内部服务器错误
- 500:在 ajax 调用上的 if(iffset($_GET())) 上出现内部服务器错误