(在线等,马上结贴)如何获取JQUERY一次异步完成的时间!

zc19860213 2010-09-13 05:36:08
我现在要做一个,loading的效果用到2个JQ方法。
// $("#NewWinK").ajaxStart(function() {
// $(this).show();
// });
// $("#NewWinK").ajaxSuccess(function() {
// $(this).hide();
// });
但是有的请求和响应的时间非常的快就不需要显示loading的效果,我想根据异步完成的时间来判断、?
不知有没有这种方法获取一次异步请求的时间?
...全文
230 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wz_307 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 theforever 的回复:]

7楼连我的思路都没理解明白,如8楼所说,那个代码根本不行.
它的执行过程跟楼主以前那种方式没什么两样,都是最原始的方法,先显示LOADING提示,再隐藏.只不过你这个先显示只是推迟1秒.本质完全没分别.反而对于在1秒之内就返回的情况,会产生错误结果.更糟糕了.

正确的方式,好好看看我说的,是在setTimeout里去检查那个代表已经返回内容的"隐藏的特殊标记".如果有,就直接退出完事,如……
[/Quote]
废话啊,
"但是有的请求和响应的时间非常的快就不需要显示loading的效果,我想根据异步完成的时间来判断、?
不知有没有这种方法获取一次异步请求的时间?"
LZ需要得到的效果是很快就不显示loading, 只不过他想完成这个效果的思路错误. 你tm一上来就劈头盖脸的日他, 每个人都会犯错, 不能说他犯错了你就要把别人日死吧. 你说我理解不了你的思路. 你能理解我的思路?
"反而对于在1秒之内就返回的情况,会产生错误结果.更糟糕了."怎么糟糕了? 1秒内返回值你不会判断是否正确? 如果不正确你可以自行继续处理. 如果正确则皆大欢喜
优秀APP开发 2010-09-15
  • 打赏
  • 举报
回复
二楼的兄台,你的长篇大论或许是对牛弹琴。。。
zc19860213 2010-09-15
  • 打赏
  • 举报
回复
我哪种说法? 你眼睛张哪去了? 我说啥了?

[Quote=引用 3 楼 theforever 的回复:]
但是,这个功能还是可以实现的,只不过,绝不是你那种说法.

第一步,在AJAX返回的数据末端,可以加一个标识对象,用STYLE为隐藏的元素,关键是和之前的内容不发生冲突,保证唯一性就行.

第二步,开始AJAX请求后,紧接着setTimeout一个函数,用你觉得合适的延迟时间,在这个函数里,去向盛放AJAX返回内容的容器对象取其innerHTML,搜索这个字串里是否含有那个隐藏元素,或者是……
[/Quote]
zc19860213 2010-09-15
  • 打赏
  • 举报
回复

我只是问问有没有这种内置方法,你说了这么多显的你很牛逼吗?我有说过要用时间相减的方法吗?

[Quote=引用 2 楼 theforever 的回复:]
引用楼主 zc19860213 的回复:
但是有的请求和响应的时间非常的快就不需要显示loading的效果,我想根据异步完成的时间来判断、?

你这什么逻辑???根本就是一个悖论.
等你取得结束的时间再和开始的时间相减,得到整个异步完成的时间的时候.这个过程不管时间长短,都已经结束了!还能达到你那种如果时间短就不显示LOADING的目的吗???
在没结束之前,在刚开始的时候,你根本没法知……
[/Quote]
  • 打赏
  • 举报
回复
7楼连我的思路都没理解明白,如8楼所说,那个代码根本不行.
它的执行过程跟楼主以前那种方式没什么两样,都是最原始的方法,先显示LOADING提示,再隐藏.只不过你这个先显示只是推迟1秒.本质完全没分别.反而对于在1秒之内就返回的情况,会产生错误结果.更糟糕了.

正确的方式,好好看看我说的,是在setTimeout里去检查那个代表已经返回内容的"隐藏的特殊标记".如果有,就直接退出完事,如果没有才显示LOADING.
zhangshaolongjj 2010-09-14
  • 打赏
  • 举报
回复
这个是不能实现的,因为你设定了遮罩时间,但他刚出现,后台就返回数据了,这样的话,遮罩就瞬间消失,和没处理过的后台返回很快的情况是一样的,所以你还是主要考虑显示的问题吧!给用户感觉好点的体验就行了!(设置大小,位置,颜色等)
wz_307 2010-09-14
  • 打赏
  • 举报
回复
代码LZ根据自己的需要改吧

var timer = null;

function sendRequest(){
clearTimeout(timer);
timer = setTimeout(function(){
showLoading();
}, 1000);

$.ajax({
url: xxx,
type: xxx,
success: function(){
clearTimeout(timer);
timer = null;
hideLoading();
},
error: function(){

}
})
}

//这里的LoadingElement是你的Loading层
function showLoading(){
$(LoadingElement).css('display', 'block');
}

function hideLoading(){
$(LoadingElement).css('display', 'none');
}
wz_307 2010-09-14
  • 打赏
  • 举报
回复
其实还是有思路的, lz 楼上几位说的太重了. 你可以将loading图片的弹出设定一个timeout, 这个timeout就是你能够接受的时间, 如果在这个timeout执行完前, 请求已经返回了, 那么就clearTimeout, 这样就能达到lz的效果了
  • 打赏
  • 举报
回复
所以,正确问问题的方法,不是去问你所想像出来的可能错误的方法.
而是应该说明白你所要解决的根本性需求,再问怎么实现.
这样才能得到最有效的帮助.
否则,自己南辕北辙了,不问怎么去哪里,却只问怎么能走得快,那帮助你的人就是让你拥抱错误更深更紧更久的人.
  • 打赏
  • 举报
回复
但是,这个功能还是可以实现的,只不过,绝不是你那种说法.

第一步,在AJAX返回的数据末端,可以加一个标识对象,用STYLE为隐藏的元素,关键是和之前的内容不发生冲突,保证唯一性就行.

第二步,开始AJAX请求后,紧接着setTimeout一个函数,用你觉得合适的延迟时间,在这个函数里,去向盛放AJAX返回内容的容器对象取其innerHTML,搜索这个字串里是否含有那个隐藏元素,或者是直接用隐藏元素的ID来取,看能否取到.如果结果是有的话,证明异步传输已经完成(此时,异步传输完成的隐藏LOADING代码也应已执行,虽然在这个方法中,此时并没显示LOADING,但无所谓),就直接退出此函数,如果没有,就说明过了指定的暂时等待时间,传输仍没完成,可能是一个长时间的过程,就显示LOADING提示.
  • 打赏
  • 举报
回复
[Quote=引用楼主 zc19860213 的回复:]
但是有的请求和响应的时间非常的快就不需要显示loading的效果,我想根据异步完成的时间来判断、?
[/Quote]
你这什么逻辑???根本就是一个悖论.
等你取得结束的时间再和开始的时间相减,得到整个异步完成的时间的时候.这个过程不管时间长短,都已经结束了!还能达到你那种如果时间短就不显示LOADING的目的吗???
在没结束之前,在刚开始的时候,你根本没法知道下载的过程长短和具体时间.
作程序员的第一条就是头脑要清楚,否则学多少也都用不好.
打击你不是目的,对我更意味着分数的损失.但愿你正确理解,知道自己现在最需要锻炼加强哪方面的素质.毫不夸张说,这对你整个人生都是作用巨大的提示.
zhangshaolongjj 2010-09-14
  • 打赏
  • 举报
回复
你的这个需求实现不了,你可以把等待的图表放小,比如浏览器的等待网页的加载一样,
浑沌滴年代 2010-09-13
  • 打赏
  • 举报
回复
var d1=new Date();//这里也可以提取秒进行计算
for(var i=0;i<10000000;i++)
{}
var d2=new Date();
alert(d2-d1);

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧