重写$.ajax方法
/*重写Jquery中的ajax 封装壳*/
$(function () {
(function ($) {
//首先备份下jquery的ajax方法
var _ajax = $.ajax; //重写jquery的ajax方法
$.ajax = function (opt) {
//备份opt中error和success方法
var fn = {
beforeSend: function (XHR) { },
error: function (XMLHttpRequest, textStatus, errorThrown) { },
success: function (data, textStatus) { },
complete: function (XHR, TS) { }
} if (opt.beforeSend) {
fn.beforeSend = opt.beforeSend;
}
if (opt.error) {
fn.error = opt.error;
}
if (opt.success) {
fn.success = opt.success;
}
if (opt.complete) {
fn.complete = opt.complete;
} //扩展增强处理
var _opt = $.extend(opt, {
//全局允许跨域
xhrFields: {
withCredentials: true
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//错误方法增强处理
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
success: function (data, textStatus) {
//成功回调方法增强处理
fn.success(data, textStatus);
},
beforeSend: function (XHR) {
//提交前回调方法
fn.beforeSend(XHR);
},
complete: function (XHR, TS) {
//请求完成后回调函数 (请求成功或失败之后均调用)。
fn.complete(XHR, TS);
}
});
if (opt.xhrFields) {
_opt.xhrFields = opt.xhrFields;
} //调用native ajax 方法
return _ajax(_opt);
};
})(jQuery);
});
jquery之重写(扩展)$.ajax和$.fn.load等方法详解
一、前提知识
往下翻页之前,有必要了解以下知识:
1. (function($){….})(jQuery)
第一个括号里边的function($){….}实际上就是一个匿名函数,它的形参是$,这很奇怪,其实这里主要是为了不与其它的库冲突。我们在调用函数的时候,通常都是函数名后边加上括号以及实参,但是由于操作符的优先级我们定义的匿名函数也需要用()括起来,所以就有了前面的(function($){....})。
现在这句代码什么意思大家应该很清楚了:第一个括号表示定义了一个匿名函数,然后(jQuery)表示为该函数传递的参数,整个结合起来意思就是,定义了一个匿名函数,然后又调用该函数,并传递实参jQuery,相当于——function fun($){…};fun(jQuery);
这种方法多用于存放开发的插件,执行其中的代码时,Dom对象并不一定加载完毕。于此相反的是$(function(){}),这种方法在使用时页面的Dom对象已经加载完毕了。事实上该方法的全写是:$(document).ready(function(){});
2.$.fn.extend和$.extend
jQuery为开发插件提拱了两个方法,分别是:
jQuery.fn.extend(object);//为jQuery的实例对象添加方法
jQuery.extend(object);//为jQuery类本身扩展,添加新的方法或覆盖原有的方法
(1)$.fn.extend
在jQuery中有如下源码:
- jQuery.fn = jQuery.prototype = {
- init: function( selector, context ) {//....
- //......
- };
由此看来jQuery.fn=jQuery.prototype,然而prototype是什么呢?
- $.fn.extend({
- test:function(){
- alert("test");
- }
- });
- $("#id").test();
(2)$.extend
此方式则表示为jQuery类添加类方法(虽然jQuery没有类的概念,但用类来理解似乎简单了不少),或者直接理解为添加静态方法,然后就可以直接用$在其他地方来调用此扩展方法了,example:
- $.extend({
- test:function(param){
- alert(param);
- }
- });
- $.test(1);//则直接弹出1
3. JavaScript的闭包
4.JavaScript的apply方法以及call方法
这两个概念也是有必要知道的,详见我转载的文章:点击这里
二、重写方法
1.重写$.ajax方法
- (function($){
- //首先备份下jquery的ajax方法
- var_ajax=$.ajax;
- //重写jquery的ajax方法
- $.ajax=function(opt){
- //备份opt中error和success方法
- var fn = {
- error:function(XMLHttpRequest, textStatus, errorThrown){},
- success:function(data, textStatus){}
- }
- if(opt.error){
- fn.error=opt.error;
- }
- if(opt.success){
- fn.success=opt.success;
- }
- //扩展增强处理
- var_opt = $.extend(opt,{
- error:function(XMLHttpRequest, textStatus, errorThrown){
- //错误方法增强处理
- fn.error(XMLHttpRequest, textStatus, errorThrown);
- },
- success:function(data, textStatus){
- //成功回调方法增强处理
- fn.success(data, textStatus);
- },
- beforeSend:function(XHR){
- //提交前回调方法
- $('body').append("<div id='ajaxInfo' style=''>正在加载,请稍后...</div>");
- },
- complete:function(XHR, TS){
- //请求完成后回调函数 (请求成功或失败之后均调用)。
- $("#ajaxInfo").remove();;
- }
- });
- return _ajax(_opt);
- };
- })(jQuery);
2.重写$.load方法
- //同样先备份下jquery的load方法
- var _load=$.fn.load;
- $.fn.extend({
- load:function(url,param,calbck){
- //其他操作和处理
- //..
- //此处用apply方法调用原来的load方法,因为load方法属于对象,所以不可直接对象._load(...)
- return _load.apply(this,[url,param,calbck]);
- }
- });
重写$.ajax方法的更多相关文章
- $.ajax()方法详解
jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...
- 重写jquery的ajax方法
//首先备份下jquery的ajax方法 var _ajax=$.ajax; //重写jquery的ajax方法 $.ajax=function(opt){ //备份opt中error和success ...
- ajax方法总结
ajax方法总结 1.原生ajax get请求和post请求区别:黄色小三角 以get请求为例,输出结果如下: 2.jquery中的ajax 列了常用的6个方法: 3.状态说明 readystate: ...
- 重写ajax方法实现异步请求session过期时跳转登录页面
jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法, $.ajax=function(opt){ var _suc ...
- jquery中$.ajax方法提交表单
function postdata(){ //提交数据函数 $.ajax({ //调用jqu ...
- Ajax方法封装
打算自己封装一个ajax方法,再不用jq库的情况下,直接引用: ajax作用:数据交互,在不刷新页面的情况下,发送请求,获取数据: 首页第一步常见一个ajax对象:XMLHttpRequest,之后会 ...
- 各种AJAX方法的使用比较
转:http://www.cnblogs.com/fish-li/archive/2013/01/13/2858599.html#_label6 AJAX技术经过这么多年的发展,出现了一些框架或类库用 ...
- MVC中使用Ajax提交数据 Jquery Ajax方法传值到action
Jquery Ajax方法传值到action <script type="text/javascript"> $(document).ready(function(){ ...
- 再谈Jquery Ajax方法传递到action 【转载】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...
- 【转】Jquery ajax方法解析返回的json数据
转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...
随机推荐
- ireport 添加行自增序号
ireport 添加行自增序号 在ireport报表中加入行的自增序号方法: 添加一个变量,如变量名为 index: 设置变量类型为Integer,计算类型为count:变量表达式为$V{index} ...
- bootstrap之表格和按钮
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python ThreadLocal
ThreadLocal: 主要是为了解决各个线程引用全局变量,并且各个线程之间互不影响而设置的. 实例: import threading threadlocal = threading.local( ...
- Ubuntu 下wifi掉线
http://blog.csdn.net/sean_xyz/article/details/51141063
- IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结
1.解决IE浏览器url带中文报错 /* encodeURI()解决IE浏览器请求url中带中文报错的问题 */ URL = encodeURI("<%=basePath%>ve ...
- P1219 八皇后 含优化 1/5
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- Python - 常用更新命令以及常见库安装
库的安装方式一般有两种: 一. pip直接安装(或使用豆瓣源) pip install scrapy pip install -i https://pypi.douban.com/simple/ sc ...
- 《Android进阶之光》--Material Design
接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...
- React Native之基于AsyncStorage的离线缓存框架设计
1.为什么要离线缓存? 宏观上来说: 提升用户体验: 我们要为用户提供流畅的APP操作体验,但我们无法保证所有用户的网络流畅度是好的,所以我们需要离线缓存来提升用户体验. 节省流量: 节省流量又分为两 ...
- ISO9000和CMM
ISO9000和CMM,谁更适合软件开发? ISO9000 和 CMM 是国际上通用的软件质量评估和管理方法.二者有很多相似之处,它们的实施都可以改变软件开发的不规范.文档不齐.维护跟不上.质量漏洞多 ...