[英]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.