【问题标题】:How to trigger the onError client side event如何触发 onError 客户端事件
【发布时间】:2015-06-18 09:53:22
【问题描述】:

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

那么是否有任何其他选项来控制 SSJS 的结果以调用 onComplete 或 onError 脚本?

更新

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

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

view.postscript("success()");

view.postscript("fail()");

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

【问题讨论】:

标签: javascript xpages xpages-ssjs


【解决方案1】:

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

【讨论】:

  • 不错的解决方案!谢谢斯文!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多