首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在用户不活动几秒钟后执行ajax代码

在用户不活动几秒钟后执行ajax代码
EN

Stack Overflow用户
提问于 2009-08-05 19:27:10
回答 4查看 669关注 0票数 1

我是新来的,所以请对我手下留情。这是一种令人困惑的情况。:)

我正在处理一个搜索输入,用户在搜索文本框中输入另一个用户的名称(或名称的一部分),然后返回与该搜索字符串匹配的用户列表。问题是,当有成千上万的用户参与时,它会有点慢。由于这种缓慢,当用户在搜索输入中快速输入姓名时,屏幕将开始为每一次击键闪烁搜索结果(在用户已经在中输入搜索字符串之后)。这就像是一个严重的延迟反应。

例如,如果我输入名字'Wendy',搜索字符串'W‘(我输入的第一个字符)的搜索结果甚至还不会显示。然后将显示字母“W”的搜索结果,然后是“We”,依此类推,尽管我已经输入了全名,只想查看“Wendy”的结果。

我想要做的是,只有当用户在一段时间内(我认为是2秒)没有输入任何内容时才执行搜索。否则,将显示“正在搜索”一词。Javascript方法的代码如下。需要注意的是,该代码目前用于搜索用户,我只需要实现延迟执行。

代码语言:javascript
运行
复制
function updateSearchResults() {
    if($F('searchString').length > 0){
        Element.update($('searchResultsScrollBox'), '<h3>Searching...</h3>'); 
        $('searching').style.display = 'block';
        var url = '<c:url value='ajaxFrontGetUsers.html'/>';
        var ajax = new Ajax.Updater({success: 'searchResults'}, url,
        {method: 'post', parameters: $('searchForm').serialize(true)});
         $('searching').style.display = 'none';
     }
}

我希望这一切都有意义。提前感谢任何能帮上忙的人。

EN

回答 4

Stack Overflow用户

发布于 2009-08-05 19:39:06

请尝试以下步骤:

  1. 每隔几毫秒,检查文本框中是否有新数据。
  2. 如果文本框中有新文本,请执行Ajax,然后将文本复制到变量中(以便在步骤1中进行比较)。

如果您希望在此基础上提高性能,则在用户输入内容时激活计时器,并在进行Ajax调用时停用计时器。

票数 2
EN

Stack Overflow用户

发布于 2009-08-06 17:54:31

嘿,谢谢你的回答。我最终设置了500毫秒的时间间隔,在该时间间隔内,javascript函数将不断检查是否在500毫秒的时间段内在搜索字符串中输入了新字符。如果是,则将调用搜索函数来搜索用户输入的字符串。否则,它将再等待500毫秒,直到用户停止键入。最后,它与您提出的非常相似。再次感谢!

票数 0
EN

Stack Overflow用户

发布于 2009-08-06 18:06:11

或者,您可以在项上放置一个“onkeypress”事件处理程序,用于清除某些全局变量或取消计时器,以防止触发AJAX事件。我知道Prototype通过它的就地编辑器和“频率”选项为你实现了这一点。(我相信它会设置一个超时计时器,在每次按键后都会取消。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1235236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档