带回调的Ajax成功函数

时间:2019-05-28 15:06:14

标签: jquery

我需要向$.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函数。理想情况下是成功回调。

1 个答案:

答案 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
    }
  });
}