3

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

我正在构建一个使用blockUI的插件(是的,我需要使用插件构建一个插件),以便在触发 Ajax 调用时在某些元素上显示加载图标,但是这个特别调用了一个alert()ifsuccess()事件得不到它需要的回应。

结果是我在火灾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我在插件中创建的变量来做到这一点?

4

1 回答 1

1

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

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

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

于 2013-06-05T00:28:15.117 回答