3

关于如何使用 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。有什么建议么?

4

3 回答 3

2

修复最终变得微不足道:需要包含 'event.preventDefault();' 在 [Enter] 键脚本中。事后看来很明显。

if ((window.event ? window.event.keyCode : event.which) == 13) {
            event.preventDefault();
        };'
于 2021-05-14T18:57:26.470 回答
2

您可以定义一个beforeSend和一个complete处理程序来在处理请求时显示和隐藏加载指示器。全局参数设置false为意味着忽略您现有的处理程序来处理请求开始和结束(提到的微调器),并且只使用在对象的特定实例中定义的这些处理程序JQAjax


    ((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 线程,直到请求得到解决。

因此,尚不完全清楚您如何管理不同工作映像(在这种情况下为宝石)返回不同事物(可能是因为具有不同的会话)中的状态,所以我也不清楚为什么执行异步 XHR 请求会得到不同的服务同步进行,我从未经历过。

从您提到的小样本中,无法推断出代码的“刷新”部分是什么。所以也许,提供更多上下文将有助于我们为您提供更准确的答案。

于 2021-05-09T14:46:57.577 回答
1

这个问题被确认是一个狭窄的配置症状:GemStone 有多个 gem。在所有其他配置 Seaside / javascript 上都按预期运行。我将将此作为供应商问题进行跟进。感谢所有看过它的人(这也发布在其他论坛上)。

于 2021-05-10T21:14:20.397 回答