取消之前的$ .get()调用

时间:2010-10-12 04:12:01

标签: jquery ajax facebook

我在使用ajax自动填充字段时遇到了一些问题。之前我做过同样的事情,但从来没有遇到过问题,因为我从来没有真正过慢的互联网连接。

我有一个输入框作为自动完成字段。我将jQuery keyup()事件绑定到该字段,我在该字段上查询每个按键的php文件,返回20个匹配元素的列表。尽管返回数据最多只有~2-3kb,但如果我开始输入更快,有时调用不会按照调用的顺序返回。

说我正在搜索“stackoverflow”。有时候,当我输入“stack”时,我得到的最终列表是“st”,这将带来比所需更多的匹配。有没有办法确保我得到的最后一个电话是实际的最终电话?

我想到的是确保新数据更小或至少等于我以前的数据,但我认为这将是非常重要的。

我正在查询的数据来自Facebook Open图,即json对象,如http://graph.facebook.com/100000530820249/friends(如果您有Facebook帐户,如果您需要对我的列表进行身份验证,可以尝试http://graph.facebook.com/me/friends) 。

我真的需要获取数据服务器端进行一些处理,因此纯粹的JS方法是不可能的。该解决方案应该只用于确保ajax调用不重叠...

先谢谢大家!

2 个答案:

答案 0 :(得分:1)

最简单的方法是让JavaScript将计数器传递给服务器端脚本,并让脚本在结果中简单地传递完全相同的值。然后JavaScript可以检查传入的结果以查看计数器是否与当前(即最近的)值匹配。如果没有,不采取行动;这一定是旧数据。

答案 1 :(得分:1)

我的建议是让自动完成功能基于计时器执行$.get()。当用户执行keyup时,启动超时(例如,参数为1秒),完成后会触发更新。在keydown事件中,取消超时。这意味着如果用户快速键入,则只有在停止/暂停时才会触发。

我承认这不太理想,但它应该让你走上正轨。

另外,另一个选择是使用jQueryUI AutoComplete小部件:http://jqueryui.com/demos/autocomplete/