我有一个搜索过滤器,可以在更改过滤器时触发ajax请求来更新结果集。通常情况下,用户会一次更换很多过滤器,从而引发许多AJAX请求。即使所有先前的请求都中止,jQuery AJAX请求也会变慢
所以我决定放弃以前的请求,如果有新的请求(通过使用ajax.abort()函数)。现在... Firebug将所有这些请求显示为中止,但最后一个请求(唯一没有中止的请求)在它之前中止的请求越来越长。
因此,例如,如果我只更改一个过滤器,则需要1秒来加载请求。但是如果我一次更换5个过滤器,则会中止4个过滤器,只留下最后一个请求。但是,此请求最终需要5秒才能完成。
任何人都知道这是为什么?我猜,即使jQuery中止请求,我的服务器仍然处理它? (我正在开发模式下运行本地Rails Mongrel,fyi)这有点击败了我中止请求的全部原因......我能做些什么来解决这个问题?
非常感谢帮助!
你确定服务器还没有处理那些先前的请求,并且它正在陷入困境? – 2010-08-15 00:51:41
正如Nick Craver所暗示的,取消AJAX请求只会破坏回调处理程序 - 您的页面将忽略任何传入的信息。但是,只要您发送AJAX请求,请求就已经发送到服务器进行处理。但是,除非您的服务器流量非常大或速度很慢,否则这不太可能是问题所在。 – 2010-08-15 01:07:48
嗯,所以我把它推到我的生产服务器上,它的工作原理很好 - 即它不是问题,因为服务器的响应速度比我能点击过滤器的速度快。就像你说的那样,只有慢速本地开发服务器的问题。仍然,似乎应该有一个更好的方式来做到这一点(为什么我们的服务器需要处理未使用的请求?)也许我会尝试安迪的答案延迟请求... – 2010-08-15 09:43:45