如何触发 onError 客户端事件
How to trigger the onError client side event
我在点击事件处理程序中有一个带有一些 SSJS 代码的按钮。它基本上调用一个 Java 方法来判断真或假。因此,我还想触发 onComplete 和 onError CSJS 脚本:onComplete 表示成功,onError 表示失败。不幸的是,我还没有弄清楚如何触发 onError 事件——至少不是以一种优雅的方式。我的第一种方法是 return 一个不同于 200(这里是 500)的 HTTP 状态码。这会触发 onError 但会在浏览器控制台中产生难看的错误消息。
那么是否有任何其他选项可以控制 SSJS 调用 onComplete 或 onError 脚本的结果?
更新
虽然我找到了解决方法,但我仍然对我的问题的解决方案感兴趣。
我的解决方法是不使用 onComplete/onError 脚本,而是通过
在我的 SSJS 中直接调用我的两个 success/fail 脚本
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>
我在点击事件处理程序中有一个带有一些 SSJS 代码的按钮。它基本上调用一个 Java 方法来判断真或假。因此,我还想触发 onComplete 和 onError CSJS 脚本:onComplete 表示成功,onError 表示失败。不幸的是,我还没有弄清楚如何触发 onError 事件——至少不是以一种优雅的方式。我的第一种方法是 return 一个不同于 200(这里是 500)的 HTTP 状态码。这会触发 onError 但会在浏览器控制台中产生难看的错误消息。
那么是否有任何其他选项可以控制 SSJS 调用 onComplete 或 onError 脚本的结果?
更新
虽然我找到了解决方法,但我仍然对我的问题的解决方案感兴趣。
我的解决方法是不使用 onComplete/onError 脚本,而是通过
在我的 SSJS 中直接调用我的两个 success/fail 脚本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>