2009-09-04 30 views
5

如何实施类似Gmail的“这是花了太长时间”warning message使用jQuery Ajax API实施“这是花太长时间”的消息与jQuery

对于那些从未在gmail上看到过此消息的人来说,当“登录”过程需要很长时间才能完成时出现,然后会提出一些解决方案。

我在我的网站上使用jQuery Ajax,并且当页面加载非常缓慢时,我想警告用户,然后提出一些解决方案(例如刷新页面或帮助页面的链接)。

回答

14

我建议,因为这安排简单的东西:

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); 
    }); 
} 
+0

到clearTimeout的参数应该是从的setTimeout(定时器处理),计时器到期时要调用不是方法的返回值。 – tvanfosson 2009-09-04 01:43:07

+0

实际上,'clearTimeout'需要超时ID,而不是你在这里使用的函数对象。 – kangax 2009-09-04 01:44:37

+0

我已经理解了逻辑和超时安排,但setTimeout函数是如何工作的并且在哪些情况下适用?我无法在jQuery文档中找到它。 – fjsj 2009-09-04 01:45:32

2

为什么不直接使用内置jQuery ajax 'timeout' option。无论如何,这是一个很好的习惯,以防您的ajax调用出现问题。或者,你可以重新发明车轮;)

编辑:和,呃,我想你会想要与错误函数耦合。

+1

如果您已使用允许错误回调的$ .ajax方法,则为+1。如果您另外使用get/load/post并且只希望这个消息太长,那么使用set/clearTimeout是可以接受的。 – tvanfosson 2009-09-04 02:21:31

+0

您也可以使用$ .ajaxSetup方法 - 这将影响所有ajax调用。 – jonstjohn 2009-09-04 13:08:00

+1

请记住,$ .ajax中的超时错误实际上会停止查找来自服务器的响应,因此它将“这不能被处理”,而不是OP所要求的“正在采取的操作太长”。 – jakeisonline 2009-10-13 08:07:29