从jsf.ajax.addOnEvent()中终止JSF Ajax请求

4

我希望有一个中心位置,可以监控Ajax请求并在某些情况下取消它们。

唯一不清楚的是如何从一个中心函数实际上取消Ajax请求。

我想解决方案可能看起来像这样:

jsf.ajax.addOnEvent(function(data) { 
    if (data.status === 'begin') {
        // abort the ajax request
    }
});

但我可能错了。

谢谢!

3个回答

3
这在标准的JSF JS API中是不可能实现的。最好的方法是在调用JSF组件上添加onclickonchange处理程序,如果满足所需条件,则返回false以中止ajax请求。
<h:commandButton onclick="return mayFireAjax(this)">
    <f:ajax />
</h:commandButton>

如果需要,您可以使用jQuery.on()(或jQuery.delegate()jQuery.live()(取决于所使用的jQuery版本)对一个共同选择器进行抽象处理,这样您就不需要在每个所需组件上重复它。

$(someSelector).on("click", function() {
    return mayFireAjax(this);
});

1
如果您控制源代码,您可以始终将onClick附加到UICommand组件。但在某些情况下,您无法访问源代码。例如,ajax由某些第三方组件提供。您不想与他们的组件搞混。首先,我有一个小的js库。
var FxJSFBegin = "JSFBegin";

if (jsf) {

    var originalRequest = jsf.ajax.request;

    jsf.ajax.request = function(source, oevent, options) {

        var event = $.Event(FxJSFBegin);

        event.options = options;

        event.originalEvent = oevent;

        $(source).trigger(event);

        if (event.isDefaultPrevented()) {

            return;

        } else {

            originalRequest.apply(null, arguments);

        }

    };

}

这段代码代理原始的JSF ajax调用。它使用jQuery触发“JSFBegin”事件。集成代码可以使用jQuery机制监听此事件。监听器可以使用event.preventDefault()取消jsf调用。
要求: 1. jQuery 2. 这段代码应该放在jsf.js加载后。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接