Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
取消JSF ajax调用_Ajax_Events_Jsf - Fatal编程技术网

取消JSF ajax调用

取消JSF ajax调用,ajax,events,jsf,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> 每次调用都需要足够的时间,以便用户在第一次调用完成之前键入几个字符

我在
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请求 打字


...
var击键超时;
keyupHandler=函数(事件){
var minChars=4;
var len=$(this).val().length;
如果((len!=0)&(len
这和你想做的有点像吗

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


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

谢谢转向过度,这正是我在此期间所做的^^。如果几天内没有更好的解决方案发布,我会坚持下去,并奖励你奖金。
    <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>