簡體   English   中英

如何觸發onError客戶端事件

[英]How to trigger the onError client side event

我在click事件處理程序中有一個帶有一些SSJS代碼的按鈕。 它基本上調用一個表示true或false的Java方法。 因此,我還要觸發onComplete和onError CSJS腳本:onComplete表示成功,onError表示失敗。 不幸的是我還沒弄清楚如何觸發onError事件 - 至少不是以優雅的方式。 我的第一種方法是返回200以外的HTTP狀態代碼(此處為500)。 這會觸發onError,但會在瀏覽器控制台中生成一條丑陋的錯誤消息。

那么有沒有其他選項來控制SSJS的結果來調用onComplete或onError腳本?

UPDATE

與此同時,我找到了一個解決方法,但我仍然對我的問題的解決方案感興趣。

我的解決方法是不使用onComplete / onError腳本,而是直接在我的SSJS中調用我的兩個成功/失敗腳本

view.postscript("success()");

view.postscript("fail()");

我認為這是一種更清潔的方法。

您可以在SSJS或Java事件中發回自己的狀態代碼:

<xp:this.action><![CDATA[#{javascript:facesContext.getExternalContext().getResponse().setStatus(999);}]]></xp:this.action>

要阻止控制台日志記錄,可以使用Dojo的xhr請求的failOk參數禁用它們(禁用所有請求的控制台日志記錄):

if( !dojo._xhr )
    dojo._xhr = dojo.xhr;

dojo.xhr = function(){        
    try{
        var args = arguments[1];   
        args["failOk"] = true;
        arguments[1] = args;
    }catch(e){}

    dojo._xhr( arguments[0], arguments[1], arguments[2] );
}

現在,您可以為事件添加錯誤處理程序方法:

<xp:this.onError><![CDATA[errorHandler(arguments[0], arguments[1])]]></xp:this.onError>

在該方法中,您可以檢查事件中的狀態代碼,並在代碼匹配時執行您想要的操作:

<script>
    function errorHandler(err, xhr){
        if( err.status == 999 ){
            // whatever
        }
    }
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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