0

我有一个定义如下的javascript方法:

updtCrtEdtPage = function() {PrimeFaces.ab({source:'j_id_ev',formId:'j_id_es',process:'typeNewLOB_in lobIdForEdit j_id_ev',update:'createLOBFullPagePanel',oncomplete:function(xhr,status,args){prepareForCrtEdtFullPage();},params:arguments[0]});}

每当此方法完成执行时,我都想执行某些方法(afterComplete() ) 。(这个方法实际上发起了一个 ajax 请求并将接收到的 HTML 数据附加到 DOM 上)。所以我希望在收到 ajax 响应时执行我的afterComplete()方法。

我不能直接这样做:

updtCrtEdtPage();
afterComplete();

因为这将在 ajax 请求启动后不久调用 afterComplete() 并且尚未完全完成执行。

有什么 JS/jQuery 方法可以做到吗?

4

2 回答 2

1

afterComplete您可以作为参数传递,以便您的函数可以在 ajax 调用完成时调用它。像这样的东西...

updtCrtEdtPage = function(callback) {
    PrimeFaces.ab({
        source:'j_id_ev',
        formId:'j_id_es',
        process:'typeNewLOB_in lobIdForEdit j_id_ev',
        update:'createLOBFullPagePanel',
        oncomplete:function(xhr,status,args){
            prepareForCrtEdtFullPage();
            callback();
        },
        params:arguments[0]
    });
}

updtCrtEdtPage(afterComplete);

既然你说你不能修改updtCrtEdtPage,但你可以修改prepareForCrtEdtFullPage我建议使用全局变量来确定方法完成时调用哪个回调函数......

updtCrtEdtPageCallback = afterComplete;

然后prepareForCrtEdtFullPage只需添加最后一行...

updtCrtEdtPageCallback();

第一种方法更整洁,但第二种方法足以满足您的特定情况。

于 2013-04-20T10:23:02.480 回答
0

您的 updtCrtEdtPage = function() 有一个 oncomplete 回调,在收到 ajax 响应时调用,在该回调中添加您的 afterComplete 函数,它将在 ajax 请求完成后执行。

 oncomplete:function(xhr,status,args){
   prepareForCrtEdtFullPage();
   afterComplete()
 }
于 2013-04-20T10:23:32.720 回答