如何在$ .post()回调之前调用函数显示alert()?

时间:2013-05-20 18:57:56

标签: javascript jquery ajax blockui

我会注意到这段代码不是我构建的,我只是在一个已经存在的系统上使用插件进行一些UI更改。

我正在构建一个利用blockUI的插件(是的,我需要使用插件构建一个插件),以便在触发Ajax调用时在某些元素上显示加载图标,但是这个如果alert()事件未获得所需的响应,则会调用success()

结果是我的加载图标在 fadeOut()次火后调用alert ,这不是我想要它做的。

当我调用我正在构建的函数时,我会传递$.post()完成我需要的设置和选项,如下所示:

$.fn.startLoading({            
    element: $("div"),
    ajax: $.post('some.url',
    {
        //Ajax settings...
    }, function (response) {   //This is the success function, right?
            if (good) {
                //stuff
            }
            else
                alert("Bad!"); //This happens BEFORE fadeOut()
        }
    }, 'text')
    .error(function (msg) {
        alert('Worse error!');
    })
});

我的插件的功能将所有这些作为一个options参数,如下所示:

$.fn.startLoading = function (options) { ...

然后我按照这样的方式访问$.post()电话:

if (options.ajax)
    ajax = options.ajax;

这就是我被困住的地方。我需要确保fadeOut()success事件被触发之前发生。如何使用我在插件中创建的ajax变量来执行此操作?

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用ajaxComplete,ajaxSuccess等http://api.jquery.com/category/ajax/

那些是全局的ajax处理程序,它们可以获取通过jQuery发送的所有ajax请求...所以你可以在那里设置一个处理程序并将你自己的回调元素列入白名单等,这样你就可以忽略那些不关心的问题。

在我的测试中,这些全局处理程序在特定ajax调用的处理程序之前触发。