使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
发布时间:2016-12-30 来源:查字典编辑
摘要:情景如何在特定的请求上实现"ajaxStart"的效果?首先,重写Ajax方法的代价太高,仍然可以利用jQuery自身的AjaxEvents...

情景

如何在特定的请求上实现"ajaxStart"的效果?

首先,重写Ajax方法的代价太高,仍然可以利用jQuery自身的Ajax Events。

Ajax触发的全局事件会像一个标准事件一样传播到所有DOM节点上。层级:jQuery Events > Ajax Events > 自定义Ajax事件。

实现

复制代码 代码如下:

Wo = window.Wo || {};

Wo.ajax = {

spinner : $([])

,init : function() {

var $spinner = this.spinner = $('#ajax-loading');

var show = function(e) {

if(e.namespace === 'Wo') $spinner.show();

};

var hide = function(e) {

$spinner.hide();

};

$spinner.bind({

'ajaxStart.Wo' : show

,'ajaxStop.Wo' : hide

,'ajaxError.Wo' : hide

});

this.adapt(['getJSON','get','post','ajax']);

}

// 预备发送请求

,_prepare : function() {

this.spinner.trigger('ajaxStart.Wo');

}

// 接口批量变更

,adapt : function(fns) {

var self = this;

$.each(fns,function(i,fn) {

Wo[fn] = function() {

self._prepare();

$[fn].apply(this,arguments);

}

});

}

};

有两种方法可以判断出触发的事件是否为特定的事件:

确定的命名空间。

在触发时传递额外的参数给事件处理程序。

这里用事件的命名空间来进行触发来源的判断。adapt方法相当于适配器的应用,用一套改善的接口替代了另一套接口。

如果要增加load方法,稍微麻烦一点,因为有可能是ajax方法或者元素的onload事件。

要添加一个代理方法,并进行类型判断:

复制代码 代码如下:

var _load = $.fn.load;

$.fn.load = function() {

$.type(arguments[0]) === 'string' && self._prepare();

_load.apply(this,arguments);

return this;

};

使用

所有方法参数仍与原先一致:

复制代码 代码如下:

Wo.post(url, [data,] callback)

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类