Xpages 在客户端完成之前防止触发服务器端事件

Xpages 在客户端完成之前防止触发服务器端事件,xpages,Xpages,我有一个包含客户端代码和服务器端代码的按钮。clientside代码包含一个addCallback函数,用于根据第一次调用的结果执行其他代码。这一切都很好,但现在我正在尝试添加服务器端JS,以便在客户端完全完成后运行 出于某种原因,服务器端代码和刷新在调用第一个RPC后运行,并跳过客户端代码的其余部分 注意:我的RPC返回字符串“true”或“false” 服务器刷新在此处运行 if (result == "false") { message = "Initiate Se

我有一个包含客户端代码和服务器端代码的按钮。clientside代码包含一个addCallback函数,用于根据第一次调用的结果执行其他代码。这一切都很好,但现在我正在尝试添加服务器端JS,以便在客户端完全完成后运行

出于某种原因,服务器端代码和刷新在调用第一个RPC后运行,并跳过客户端代码的其余部分

注意:我的RPC返回字符串“true”或“false”

服务器刷新在此处运行

if (result == "false") {
            message = "Initiate Settlement process failed";
            $(".infoMessage").text(message);
            atmRPC.updateInfoMsg(message);
        } else if (result == "true"){
            var tranType = "Settlement";
            var deferredInner = atmRPC.settleATMInitiate(settlementCorrectYN, tranType, todayAmt, amtReceived, atmID);
            deferredInner.addCallback(function(result){
            alert("inner result=" + result)
            if (result == "false") {
                message = "";
                $(".infoMessage").text(message);
                atmRPC.updateInfoMsg(message);
            } else if(result == "true"){
                message = atmID + " has been successfully Settled."
                $(".infoMessage").text(message);
                atmRPC.updateInfoMsg(message);
            }
            })
        } 
      }
    )

如果服务器刷新是部分或完全刷新,则会发生这种情况。如何强制SSJS和相应的刷新仅在最后运行。

延迟调用以异步方式执行,因此代码将继续运行并触发服务器代码。您需要将此调用更改为“同步”方式。(虽然强烈不建议这样做)

您可以继续学习-让您的XPages按钮不提交并执行客户端代码

有一个带有类选择器的隐藏按钮,它也有一个显示样式:无

在你的回电中

$('.classSelector).click()
类选择器添加到要单击的XPages按钮中

<xp:button id="stevesId" styleClass="classSelector"></xp:button>


你好,史蒂夫。您为什么不在addCallback中作为辅助远程服务调用运行额外的SSJS呢?然后,您可以使用第二个远程服务的回调并执行partialRefreshGet/Post来代替标准的部分刷新?这将为您提供与以标准方式运行SSJS相同的效果。谢谢John!我确实使用了下面Marky的答案。这似乎也是一个很好的方法。
<xp:button id="stevesId" styleClass="classSelector"></xp:button>