【问题标题】:jQuery/AJAX type-ahead/auto-completejQuery/AJAX 预输入/自动完成
【发布时间】:2010-04-28 11:32:01
【问题描述】:

我已经阅读了几篇讨论 jQuery 的最佳自动完成插件的文章/问题/论坛。在尝试了几个好的之后,我发现了其中的一个缺陷。

  1. 如果您正在查找国家/地区并输入“输入”,则会显示几个国家/地区。 如果您继续输入 I-n-d-i-a,这将导致 5 次 AJAX 调用(请参阅 http://www.freeimagehosting.net/uploads/6f1bcd69e1.png) 印度是 ​​In 的一个子集,这很自然,那为什么还要打电话呢?我们需要在客户端简单地过滤检索到的列表。 有人知道这样的实现吗?

  2. Jquery 自动完成功能的状态如何?我在 StackOverflow 上读到 Jquery 不再提供它;但是 Jquery 网站除了指向自动完成的链接之外还有一个“新建”标记。

谢谢

【问题讨论】:

  • 听起来像是编写更好插件的机会。我想只有第一个例如 10 个响应被返回,你需要重新查询才能获得所有的 ind。但如果响应少于阈值,则应按照您的建议重复使用这些响应。
  • 这是一个非常好的观点,如果您只是在最后添加到查询中,您可以过滤掉您拥有的内容。有没有插件考虑到这个想法?大约两年前有人问过这个问题,我很想知道答案。

标签: ajax jquery


【解决方案1】:

您在 1. 中所写的要点可能是因为:

  • 搜索“In”应该会返回很多结果
  • 在服务器端有一些限制,不能返回超过 N 个结果
  • 这意味着包含“In”的国家/地区的完整列表在客户端是未知的
  • 这意味着如果没有另一个 Ajax 请求,就无法(肯定)获得与“Ind”相对应的列表。

一种常用的半解决方案是在按键后不立即发送 Ajax 请求,而是仅在 100 或 200 毫秒后发送。

这样,如果用户快速输入“Indi”,并在输入其他内容之前等待,则对于“Indi只有 1 个 Ajax 请求(对于“In”则没有, "Ind")

【讨论】:

  • 哦,是的,我已经这样做以减少请求数。您讨论的场景是有效的,但可以定义一些参数来避免这种次优行为。
【解决方案2】:

在新版本 1.8 中添加了 jQuery UI 自动完成功能,据我在项目活动中看到的,它仍在开发中。有一个example 使用有关您解释的问题的客户端缓存。您也可以使用已经提到的 delay 选项。

【讨论】:

  • 很高兴知道他们将继续使用自动完成功能。然而,这个例子在缓存方面并不是最好的。尝试一次查找 'Nightingale' 一个字符。当从 'night' (5 个结果)到 'nighti' (2 个结果)时,它会触发一个呼叫 :( 猜我将不得不忍受额外的呼叫 :( : ( :(
  • 他们所做的只是简单的正则表达式匹配。所以你基本上只需要在发送新请求之前先匹配你的缓存列表。对于远程源,您始终必须考虑,您可能无法获得整个列表以供输入,例如中,它也可能被限制为最大项目数。因此,无论如何您都必须为下一封信发送一个新事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多