每个Ajax调用的Javascript(之前和之后)

时间:2013-05-09 13:38:51

标签: java ajax jsf tinymce

由于我正在使用TinyMCE(请不要进入“Primefaces有编辑器”或类似的东西)我需要在每个{{之前和之后Javascript执行一小段Ajax 1}} - 打电话。我不想编辑每个Ajax - 因为有很多事情要求这样做(这样做对未来的任何维护都是不好的做法)。

在页面上调用任何Javascript之前和之后执行Ajax的最优雅解决方案是什么?

注意:我正在为composite - textarea使用自定义TinyMCE。任何事件也都是这个对象也足够了。但请记住,实际的Ajax - 触发器可能由完全不同的对象调用(尽管可能会重新呈现composite)。

2 个答案:

答案 0 :(得分:7)

使用jsf.ajax.addOnEvent处理程序。

jsf.ajax.addOnEvent(function(data) {
    switch(data.status) {
        case "begin":
            // This is invoked right before ajax request is sent.
            break;

        case "complete":
            // This is invoked right after ajax response is returned.
            break;

        case "success":
            // This is invoked right after successful processing of ajax response and update of HTML DOM.
            // In case you're interested in error handling, use jsf.ajax.addOnError handler.
            break;
    }
});

将它放在一个JS文件中,<h:outputScript target="head">包含在所需页面的<h:body>中。这将确保在 JSF自己的jsf.js包含jsf命名空间之后加载

答案 1 :(得分:0)

JSF的onevent标记有一个<f:ajax>属性,用于在JSF应用程序中执行AJAX任务。基本上它指定了一个名为tripice的JavaScript函数:在发送AJAX调用之前,收到AJAX响应之后以及更新HTML DOM之后。正是出于这个目的,PrimeFaces已将这些回调分别分为onstartonsuccessoncompleteonerror

不要重复,您可以在How to re-execute javascript function after form reRender?的答案中找到用法示例。