[英]Multi-web server ajax callback with refresh on Enter
關於如何發送帶有 onSuccess 的 jQuery 回調的問題:當用戶按下 [Enter] 時從 textInput 刷新。 我們使用 [Enter] 按下觸發搜索回調。
我們的 GS Seaside 應用程序使用 HAProxy。 這意味着 onSuccess: 腳本由不同於處理回調的 gem 處理。 正因為如此,用戶有時會因為回調而獲得刷新,在他們看來,這就像丟失的輸入(瀏覽器 F5 刷新顯示正確的狀態)。 如果運行單個 gem 或在 VW / Pharo 圖像中,則不會出現此問題。
我可以通過使用來解決這個問題...
async: false;
...但這使我無法顯示任何等待反饋(我通常使用忙碌的 gif)。
所以,問題是:在多 Web 服務器配置中,你如何編寫一個回調來......
1 - 顯示一個忙碌的 gif
2 - 觸發搜索回調
3 - 完成后刷新顯示
……都按這個順序。
使用表單提交回調是一個問題,因為多個文本輸入可以觸發搜索,因為回調是“設置值 + 執行搜索”,默認按下 [Enter]。
對於 JS 回調,我正在使用...
self onKeyPress: (
(JSStream
on: '(window.event ? window.event.keyCode : event.which) == 13')
then: (canvas jQuery ajax callback: aBlock value: canvas jQuery this value))
由於'async:false',這一切都很好,除了缺少繁忙的gif。 有什么建議么?
您可以定義一個beforeSend
和一個complete
的處理程序,以在處理請求時顯示和隱藏加載指示器。 全局參數設置為false
意味着忽略您現有的處理程序來處理請求開始和結束(提到的微調器),並且只使用在JQAjax
object 的特定實例中定義的這些處理程序。
((html jQuery ajax)
async: false;
global: false; "https://api.jquery.com/category/ajax/global-ajax-event-handlers/"
callback: aBlock value: canvas jQuery this value;
onBeforeSend: (html jQuery id: 'indicator') show;
onSuccess: ((html jQuery id: 'fieldId') load html: [:h | ]);
onComplete: (html jQuery id: 'indicator') hide;
也就是說,請記住,不鼓勵執行同步 AJAX 調用,因為它會阻塞整個 UI 線程,直到請求得到解決。
因此,尚不清楚您如何在不同的工作映像(在這種情況下為寶石)返回不同的東西(可能是因為有不同的會話)中管理 state,因此我也不清楚為什么執行異步 XHR 請求會以不同的方式提供服務同步進行,我從未經歷過。
從您提到的小樣本中,無法推斷出代碼的“刷新”部分是什么。 所以也許,提供更多上下文將有助於我們為您提供更准確的答案。
修復最終變得微不足道:需要包含 'event.preventDefault();' 在 [Enter] 鍵腳本中。 事后看來很明顯。
if ((window.event ? window.event.keyCode : event.which) == 13) {
event.preventDefault();
};'
這個問題被確認是一個狹窄的配置症狀:GemStone 有多個 gem。 在所有其他配置 Seaside / javascript 的行為與預期相同。 我將將此作為供應商問題進行跟進。 感謝所有看過它的人(這也發布在其他論壇上)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.