我希望有一个中心位置来监控ajax请求,并在某些情况下中止它们。
我唯一不知道要做的是实际中止来自一个中心函数的ajax请求。
我想,解决方案看起来像这样:
jsf.ajax.addOnEvent(function(data) {
if (data.status === 'begin') {
// abort the ajax request
}
});
但我可能错了。
谢谢!
答案 0 :(得分:3)
标准JSF JS API无法做到这一点。最好的办法是在调用JSF组件上添加onclick
或onchange
处理程序,如果满足所需条件则返回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 :(得分: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调用。
要求:
答案 2 :(得分:-1)
使用global =“false”将帮助您阻止调用ajax调用的ajax状态。请参阅以下链接。
Different Ajax statuses for different components in PrimeFaces