【发布时间】:2016-05-08 21:56:25
【问题描述】:
例如,假设页面返回基于去抖用户文本的搜索结果。
您如何考虑端点具有高度可变延迟的情况,在这种情况下,第二次调用可以在第一次调用之前返回。
例如
用户正在键入 “书籍和电影”,按键去抖时间为 500 毫秒
用户在中间稍微停顿了一下,所以字符串是“books”,这会触发搜索调用。
用户继续输入并完成,触发第二次调用“books and movies”。
第二个调用首先返回,根据“书籍和电影”填充列表。
然后第一个被延迟的调用返回并根据“books”重新呈现列表。
用户只看到“书”,感到困惑。
解决此问题的可靠方法是使用按钮手动触发呼叫。不过我想避免这种情况,所以我增加了去抖动,但我想知道是否有更好的方法。
【问题讨论】:
-
使用同步 ajax 吗? :)
-
您应该只在 debouce 过程结束时进行调用。您可以以同步的方式实现这一目标。
-
不要使用同步 ajax。一种选择是用启动时间标记每个搜索请求,并将该信息包含在响应中。只有当响应比之前的响应“更新”时,您才能填充列表。
-
时间戳方法将是我的备份选项,但我想知道这是否是一个“已解决”的问题,因为 keyup 上的 ajax 调用是多么常见。也许端点的脆弱性会阻止这种类型的用户体验。
标签: javascript