ajax - 取消 JSF ajax 调用

标签 ajax events jsf

我在 h:inputText 标签内有一个 f:ajax 标签,对 keyup 事件进行 ajax 调用:

<h:inputText id="searchinput" value="#{tvShowForm.name}">
  <f:ajax event="keyup" render="results" listener="#{tvShowForm.search}" />
</h:inputText>

每次调用都需要足够的时间,用户在第一次调用完成之前已经键入了几个字符。

有没有办法取消当前的ajax调用(以及排队的ajax调用),以便最后一个keyup事件立即执行ajax调用?

最佳答案

听起来您想合并事件,例如这将等待 触发 ajax 请求之前半秒,以及此时键入的任何输入 点将被包括在内。但你不会为每个角色触发 ajax 请求 已输入。

    <h:inputText onkeyup="keyupHandler();"/>
    ...
    <script>
    var keystrokeTimeout;

    keyupHandler = function(event) {

        var minChars = 4;
        var len = $(this).val().length;
        if((len != 0) && (len < minChars)) {
            return;
        }

        var ajaxRequest = function() {
            jsf.ajax.request('results', null, {
                execute: 'results',
                render: 'results'
            });
        }
        clearTimeout(keystrokeTimeout);
        keystrokeTimeout = setTimeout(ajaxRequest, 500); // millisecs
    }
    </script>

这是否像您想做的那样?

编辑:另一个建议是您查看 Richfaces 4 a4j:queue 功能。 这允许组合事件,例如在键盘场景中,如果您已经 靠在键盘上,当当前的 ajax 请求仅完成另一次时 将发送请求。还可以指定请求延迟并忽略陈旧的请求 回应。 Richfaces 没有犯的大错误(primefaces 确实犯过)是 RF 使用与 JSF 实现相同的底层队列,因此您没有风险 无序处理。

我很感激,如果您还没有使用这个库,那么这不是一个小步骤。

关于ajax - 取消 JSF ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889257/

相关文章:

javascript - 如何从异步调用返回响应?

javascript - Rails 使用 AJAX 删除评论

c# - 事件默认初始化器

jquery - jQuery 中的自定义事件?

java - 将 JSF Managed Beans 移动到 Spring beans

javascript - 阻止 JQuery promise 传播到包装器失败

ajax - 在grails服务中使用g.render

C# 禁用事件处理程序问题

JSF2.0 在使用 commandButton 时如何将 viewParam 传递到请求范围的支持 bean?

java - 无法在应用于 AJAX 的多个类上设置 CSS