Ajax请求和回调更新同时触发

时间:2009-09-03 21:25:26

标签: javascript ajax jquery callback

我有一些按以下方式定义的提交按钮:

<input id="add_200,231" type="submit" onclick="updatePage(401,27371,200,231)" value="Add"/>

“onclick”中引用的相应javascript函数如下所示:

function updatePage(slac,sci,tlac,tci) {
    var url = '/neighbouring?.state=add_cell&source=' + slac + ',' + sci +'&target='+ tlac + ',' + tci + '&dummy='+(new Date()).getTime();

    new Ajax.Request(url,{
        onComplete: triggerContentUpdate(slac,sci)      
    });
}

function triggerContentUpdate(slac,sci) {
    var updates = document.getElementsByClassName('update_on_add');
    for (var i = 0; i < updates.length; i++) {
        var uid = updates[i].id;
        var url = '/neighbouring?.state=update_template&divid=' + uid + '&source='+slac + ',' +sci + '&dummy='+(new Date()).getTime();
        var uAjax = new Ajax.Updater(uid,url,{ method: 'get'});

    }
}

需要更新的元素标有“update_on_add”类标记。

使用Firebug时,我可以看到updatePage()中的Ajax.Request以及triggerContentUpdate()函数中的Ajax.Update同时被调用。我希望只在Ajax.Request完成后调用triggerContentUpdate()。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

你的行

onComplete: triggerContentUpdate(slac,sci) 

应该是

onComplete: function() { triggerContentUpdate(slac,sci); }

您正在立即调用该函数并将其返回值分配给onComplete成员。

答案 1 :(得分:0)

您的配置问题是您注册的回调不是函数调用,而是函数调用。

onComplete: triggerContentUpdate(slac,sci)

当javascript找到上面的行时,它将使用给定的参数调用函数triggerContentUpdate,并将函数的返回值赋给onComplete属性。

Greg已经采用了一种处理方式,我们正在为onComplete属性分配一个匿名函数引用。

另一种处理方法是使函数triggerContentUpdate返回一个函数,如下所示

function triggerContentUpdate(slac,sci){
    return function(){
        //Your logic goes here. Both your variables slac and sci are available inside the returned function.
        //This uses the concept of javascript clousure
    }
}