如何实施类似Gmail的“这是花了太长时间”warning message使用jQuery Ajax API?实施“这是花太长时间”的消息与jQuery
对于那些从未在gmail上看到过此消息的人来说,当“登录”过程需要很长时间才能完成时出现,然后会提出一些解决方案。
我在我的网站上使用jQuery Ajax,并且当页面加载非常缓慢时,我想警告用户,然后提出一些解决方案(例如刷新页面或帮助页面的链接)。
如何实施类似Gmail的“这是花了太长时间”warning message使用jQuery Ajax API?实施“这是花太长时间”的消息与jQuery
对于那些从未在gmail上看到过此消息的人来说,当“登录”过程需要很长时间才能完成时出现,然后会提出一些解决方案。
我在我的网站上使用jQuery Ajax,并且当页面加载非常缓慢时,我想警告用户,然后提出一些解决方案(例如刷新页面或帮助页面的链接)。
我建议,因为这安排简单的东西:
function tooLong() {
// What should we do when something's taking too long? Perhaps show a `<div>` with some instructions?
$("#this-is-taking-too-long").show();
}
// Then, when you're about to perform an action:
function performSomeAction() {
var timer = setTimeout(tooLong, 10000);
$.get('/foo/bar.php', {}, function() {
// Success!
clearTimeout(timer);
});
}
为什么不直接使用内置jQuery ajax 'timeout' option。无论如何,这是一个很好的习惯,以防您的ajax调用出现问题。或者,你可以重新发明车轮;)
编辑:和,呃,我想你会想要与错误函数耦合。
如果您已使用允许错误回调的$ .ajax方法,则为+1。如果您另外使用get/load/post并且只希望这个消息太长,那么使用set/clearTimeout是可以接受的。 – tvanfosson 2009-09-04 02:21:31
您也可以使用$ .ajaxSetup方法 - 这将影响所有ajax调用。 – jonstjohn 2009-09-04 13:08:00
请记住,$ .ajax中的超时错误实际上会停止查找来自服务器的响应,因此它将“这不能被处理”,而不是OP所要求的“正在采取的操作太长”。 – jakeisonline 2009-10-13 08:07:29
到clearTimeout的参数应该是从的setTimeout(定时器处理),计时器到期时要调用不是方法的返回值。 – tvanfosson 2009-09-04 01:43:07
实际上,'clearTimeout'需要超时ID,而不是你在这里使用的函数对象。 – kangax 2009-09-04 01:44:37
我已经理解了逻辑和超时安排,但setTimeout函数是如何工作的并且在哪些情况下适用?我无法在jQuery文档中找到它。 – fjsj 2009-09-04 01:45:32