我有一个包含客户端代码和服务器端代码的按钮。客户端代码包含一个addCallback函数,用于执行依赖于第一个结果的附加代码。这一切都运行正常,但现在我正在尝试添加服务器端JS以在客户端完全完成后运行。
由于某种原因,在调用第一个RPC并跳过其余的客户端代码后,服务器端代码和刷新正在运行。
注意:我的RPC返回字符串“true”或“false”。
message = "Starting Initiate Settlement Process...";
$(".infoMessage").text(message);
atmID = $("input.atmID").val(); //pull from hidden input
settlementCorrectYN = $( "input:checked" ).val();
todayAmt = $( ".todayAmt" ).val();
amtReceived = $( ".amtRec" ).val();
var tranType = "Settlement";
var deferred = atmRPC.closeATMSettle(tranType);
deferred.addCallback(function(result){
alert("first result=" + result);
SERVER REFRESH RUNS HERE
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和伴随的刷新仅在最后运行。
答案 0 :(得分:2)
延迟调用以异步方式执行,因此代码继续运行并触发服务器代码。您需要将此调用更改为“同步”方式。 (虽然强烈建议不要这样做)
答案 1 :(得分:1)
您可以上学 - 让您的XPage按钮不提交并执行您的客户端代码。
有一个带有classSelector的隐藏按钮,该按钮也具有display:none
的样式 回调中的
$('.classSelector).click()
将类选择器添加到要单击的XPage按钮
<xp:button id="stevesId" styleClass="classSelector"></xp:button>