簡體   English   中英

多網絡服務器 ajax 回調,在 Enter 上刷新

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

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