加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

取消JSF ajax调用

发布时间:2020-12-16 02:49:18 所属栏目:百科 来源:网络整理
导读:我在h:inputText标记内有一个f:ajax标记,对keyup事件进行ajax调用: h:inputText id="searchinput" value="#{tvShowForm.name}" f:ajax event="keyup" render="results" listener="#{tvShowForm.search}" //h:inputText 每次调用都需要足够的时间,用户在第
我在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调用(以及排队的调用),以便最后一个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:队列功能.
这允许组合事件,例如,如果你曾经在键盘场景中
当你的当前ajax请求只完成一个时,它依靠你的键盘
请求将被发送.也可以指定请求延迟并忽略陈旧
响应. Richfaces没有做出的重大错误(那些素数确实如此)就是这样
RF使用与JSF实现相同的底层队列,因此您没有风险
无序处理.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读