重写$.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数据时发现一个问题,那就是返 ...
随机推荐
- jQuery插件实践之轮播练习(二)
所有文章搬运自我的个人主页:sheilasun.me 上一篇中学习了jQuery插件的写法,这篇该着手实现啦.首先明确一下轮播要具备哪些功能: 可以点击"向后"按钮向后翻页 可以点 ...
- POJ 1258 Agri-Net (Prim&Kruskal)
题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通.求边的最小总花费. 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复 ...
- BZOJP1899ZJOI2004
老早的一道水题 题意: 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以 ...
- java web开发阅读笔记:第一章
学习该书前所用推荐书籍<名师讲坛—java开发实战经典> 一web开发前奏 1.1网页发展 首先搞懂. 1.HTTP:超级文本传输协议,是一种通讯协议. 通过这个网络协议WW浏览器与WWW ...
- 【Java】 剑指offer(58-2) 左旋转字符串
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 ...
- Redis数据结构之list
一:介绍 1.存储list ArrayList使用数组的方式 LinkedList使用双向链接的方式 二:Redis客户端 1.左端与右端插入 2.左端查询 3.左端与右端弹出 4.长度 5.在头部插 ...
- [洛谷P2066]机器分配
题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...
- 算法进阶面试题04——平衡二叉搜索树、AVL/红黑/SB树、删除和调整平衡的方法、输出大楼轮廓、累加和等于num的最长数组、滴滴Xor
接着第三课的内容和讲了第四课的部分内容 1.介绍二叉搜索树 在二叉树上,何为一个节点的后继节点? 何为搜索二叉树? 如何实现搜索二叉树的查找?插入?删除? 二叉树的概念上衍生出的. 任何一个节点,左比 ...
- Django 学习第一天——django 基本介绍和环境搭建
web 应用设计模式(MTV MVC): MTV: M:models 模型:负责业务数据对象与数据库对象: T:templates 模板:负责如何把数据展示给用户: V:views 视图:负责业务逻辑 ...
- c#获取程序版本号
Content.Text = "程序集版本:" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Vers ...