我需要向$.ajax()
成功回调函数添加回调。我正在使用jQuery 1.3
success : ajaxCartFormSubmitted(),
function ajaxCartFormSubmitted(e) {
longRunningOperation();
if (e)...
});
我应该在ajaxCartFormSubmitted()
之后运行的函数是:
function modalopen () {
if ($('#ajax-cart-popup .full').length) {
openmodal('ajax-cart-popup');
} else {
return false;
}
};
我试图像这样ajaxCartFormSubmitted(e)
向ajaxCartFormSubmitted(e, callback)
添加回调,并像这样success : ajaxCartFormSubmitted('modalopen()'),
使用回调
但我没有得到结果,似乎该功能没有触发。第一个e
参数有问题吗?谢谢。
更新:我需要在ajaxCartFormSubmitted函数之后触发modalopen函数。理想情况下是成功回调。
答案 0 :(得分:1)
这里有几个问题。首先,您需要将函数 reference 传递给success
。通过立即调用该函数,您实际上是将其返回值分配给success
,因此似乎什么也没有发生。要解决此问题,只需从函数名称中删除括号:
success: ajaxCartFormSubmitted,
接下来,要在modalopen()
之后执行ajaxCartFormSubmitted()
,您需要在那时调用它。仅将函数名称作为参数传递是不够的。您需要明确调用该函数。您可以在ajaxCartFormSubmitted()
中进行此操作:
function ajaxCartFormSubmitted(e) {
// do something...
modalopen();
});
或者,您可以为success
提供一个匿名函数,该函数调用这两个函数:
success: function() {
ajaxCartFormSubmitted();
modalopen();
},
最后,请注意几个事项。您需要来更新jQuery,因为1.3已过期10年。 3.4是最新版本。另外,我会谨慎处理您的函数名称。您似乎同时拥有openmodal()
和modalopen()
,而这种相似之处只是在问问题。
编辑
ajaxCartFormSubmitted函数包含另一个函数,需要一些时间来处理。这就是为什么我需要在ajaxCartFormSubmitted
之后调用我的函数的原因
在这种情况下,您需要自己实现回调模式,就像$.ajax()
那样。您可以使ajaxCartFormSubmitted()
接受一个函数作为参数,该函数将在异步操作完成后执行,如下所示:
// in $.ajax settings:
success: function() {
ajaxCartFormSubmitted(openmodal);
}
// function definition:
function ajaxCartFormSubmitted(cb) {
some.longRunningOperation({
oncomplete: function() {
cb && cb(); // invoke the function you passed in here, openmodal() in this case
}
});
}