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



我要注意的是,这段代码不是我编写的,我只是在一个已经存在的系统上使用插件做了一些UI更改。

我正在构建一个插件,利用blockUI(是的,我需要用插件构建一个插件),以便在Ajax调用被触发时在某些元素上显示加载图标,然而,如果success()事件没有得到它需要的响应,这个插件特别调用alert()

这样做的结果是我的加载图标调用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变量我已经在我的插件中创建?

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

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

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

相关内容

  • 没有找到相关文章

最新更新