如何触发onError客户端事件

时间:2015-06-18 09:53:22

标签: javascript xpages xpages-ssjs

我在click eventhandler中有一个带有一些SSJS代码的按钮。它基本上调用一个表示true或false的Java方法。因此,我还要触发onComplete和onError CSJS脚本:onComplete表示成功,onError表示失败。不幸的是,我还没有弄清楚如何触发onError事件 - 至少不是以优雅的方式。我的第一种方法是返回200以外的HTTP状态代码(此处为500)。这会触发onError,但会在浏览器控制台中生成一条丑陋的错误消息。

那么有没有其他选项来控制SSJS调用onComplete或onError脚本的结果?

更新

与此同时,我找到了解决方法,但我仍然对我的问题的解决方案感兴趣。

我的解决方法不是使用onComplete / onError脚本,而是直接通过我的SSJS调用我的两个成功/失败脚本

view.postscript("success()");

view.postscript("fail()");

我认为这是一种更清洁的方法。

1 个答案:

答案 0 :(得分:3)

您可以在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>