2015-04-01 88 views
1

我有一個包含客戶端代碼和服務器端代碼的按鈕。客戶端代碼包含一個addCallback函數,用於根據第一個結果執行附加代碼。這一切工作正常,但現在我正試圖添加serverside JS運行AFTER客戶端完全完成。防止服務器端事件發生,直到客戶端完成

出於某種原因,在第一個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); 

服務器更新這裏生生不息

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

http://stackoverflow.com/questions/9769674/how-do-i-call-an-ssjs-method-with-parameters-from-javascript – 2015-04-02 08:50:28

+1

史蒂夫嗨。是否有一個原因,您沒有在addCallback中運行額外的SSJS作爲輔助遠程服務調用?然後,您可以使用第二個Remote Service的callBack並執行partialRefreshGet/Post來代替標準部分刷新?這會給你帶來和運行SSJS一樣的效果。 – 2015-04-02 17:10:57

+0

謝謝John!我確實使用了Marky的答案。這似乎也是一個好方法。 – 2015-04-02 18:11:32

回答

1

你可以去舊學校 - 讓你的XPages按鈕不提交併執行你的客戶端代碼。

有一個classSelector其中也有顯示的風格隱藏的按鈕:無

在回調

$('.classSelector).click() 

所在類別選擇器添加到您想要點擊

的XPages中按鈕
<xp:button id="stevesId" styleClass="classSelector"></xp:button> 
2

延遲調用是以異步方式執行的,所以代碼一直運行並且觸發了服務器代碼。您需要將此調用更改爲「同步」方式。 (雖然這是強烈建議不要)

相關問題