簡體   English   中英

取消JSF ajax調用

[英]Cancel JSF ajax call

我在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實現相同的底層隊列,因此您不存在無序處理的風險。

我很感激,如果您還沒有使用這個庫,那么這不是一個小步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM