jQuery等待函数完成,然后再执行新操作

时间:2020-03-21 20:28:18

标签: javascript jquery asp.net-mvc-4

我在jQuery中有两个要按特定顺序触发的函数。第一个功能是ajax功能,可更新部分视图。一旦ajax函数完成,则另一个应该在局部视图上进行样式设置-该函数需要一个参数。

ajaxFunction();
stylingFunction(params);

我尝试了以下方法:

ajaxFunction(function() {
    stylingFunction(params)
});

此外,我尝试使用回调:

ajaxFunction(stylingfunction(params));

ajaxFunction(callback)
{
    //Do update
    callback()
}

但是这些都不起作用。由于部分视图正在更新,因此样式不久就会消失。我在哪里错了?

这两个函数都写在我的“父”视图中。

2 个答案:

答案 0 :(得分:0)

由于您使用的是jQuery,因此可以const ajaxFunc = callback => $.ajax({...}).done( data => callback)使用async / await。您可以在MDN上详细了解它。

答案 1 :(得分:0)

您可以使用链接到$ .ajax调用的.done()和.fail()...

我在successCallback()内用psuedo代码创建了几个回调函数,因为您说过您只需要“有时”运行样式函数。您将需要测试该函数内部的任何条件,以确定是否要运行样式函数。希望这可以帮助。

(function($) {
  $(function() {   //document.ready

    $.ajax({ cache: false,
        url: "/blah/vlah/lah",
        data: { somedata: somedata }
    })
    .done(successCallback)
    .fail(failCallback);

  });

    function successCallback(data) {
        if (someCondition) {
            stylingFunction(params);
        }
    };

    function failCallback(jqXHR, status, error) {
        console.log(jqXHR);
        console.log(error);
        console.log(status);
    };

})(jQuery);

我创建了另一个处理ajax事件委托的要点,您可能需要查看并合并所有可能对您的情况有所帮助的内容。 https://gist.github.com/inceptzero/a753d020648f49da90f8

我还在github上为ajax请求队列创建了这个要点,它更加优雅和健壮。 https://gist.github.com/inceptzero/e64756f9162ca6aeeee5