jQuery的实现原理的模拟代码 -5 Ajax


Posted in Javascript onAugust 07, 2010
// 创建 XHR 对象 
var xhr; 
if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
else if (window.ActiveXObject) { 
xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
} 
else { 
throw new Error("Ajax is not supported by this browser"); 
} 
function ready() 
{ 
alert("Start......"); 
// 通过事件来处理异步请求 
xhr.onreadystatechange = function() 
{ 
if( xhr.readyState == 4 ) 
{ 
alert( "Ready."); 
if( xhr.status == 200 ) 
{ 
alert("成功获得服务器返回的结果."); 
// 请求结束之后,可以获取服务器返回的内容 
alert( xhr.responseText ); 
// 获取服务器返回的 json 对象 
var alice = eval( "(" + xhr.responseText + ")" ); 
alert( alice.name ); 
} 
} 
}; 
// 设置请求参数 
xhr.open("get", "data.json" ); 
xhr.send( null ); 
}

jQuery 简单地包装了对 xhr 对象的使用,通过对 jQuery 对象增加常用的访问方法,然后,提供给 jQuery 对象来使用。
// 主要的扩展在 jQuery.ajax 中。 
jQuery.extend({ // #6299 
// 请求的默认参数 
ajaxSettings: { 
url: location.href, 
type: "GET", 
contentType: "application/x-www-form-urlencoded", 
data: null, 
xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ? 
function () { 
return new window.XMLHttpRequest(); 
} : 
function () { 
try { 
return new window.ActiveXObject("Microsoft.XMLHTTP"); 
} catch (e) { } 
} 
}, 
// 用来设置 jQuery.ajaxSettings ,设置请求的参数 
ajaxSetup: function (settings) { 
jQuery.extend(jQuery.ajaxSettings, settings); 
}, 
ajax: function (origSettings) { // 实际的 ajax 函数 
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings); 
// 创建 xhr 对象 
xhr = s.xhr(); 
// 回调函数 
var onreadystatechange = xhr.onreadystatechange = function (isTimeout) { 
if (xhr.readyState === 4) { 
if (xhr.status == 200) { 
s.success.call(origSettings, xhr.responseText); 
} 
} 
}; 
// 设置请求参数 
xhr.open(s.type, s.url); 
// Send the data 发出请求 
xhr.send(s.data); 
// return XMLHttpRequest to allow aborting the request etc. 
return xhr; 
}, 
// 使用 get 方式发出 ajax 请求的方法 
get: function (url, data, callback, type) { 
// shift arguments if data argument was omited 
if (jQuery.isFunction(data)) { 
type = type || callback; 
callback = data; 
data = null; 
} 
return jQuery.ajax({ 
type: "GET", 
url: url, 
data: data, 
success: callback, 
dataType: type 
}); 
} }); // #6922 
// 扩展 jQuery 对象,增加 load 方法 
jQuery.fn.extend( 
{ 
load: function (url) { 
var self = this; 
jQuery.get(url, function (data) { 
self.each(function () { 
this.innerHTML = data; 
} 
) 
} 
) 
} 
} 
)

在页面中,可以如下使用。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
</head> 
<body> 
<input type="button" id="btn" value="Click me" /> 
<div id="msg"> 
</div> 
<script src="jQuery-core.js" type="text/javascript"></script> 
<script src="jQuery-event-2.js" type="text/javascript"></script> 
<script src="jQuery-data.js" type="text/javascript"></script> 
<script src="jQuery-extend.js" type="text/javascript"></script> 
<script src="jQuery-ajax.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$("#btn").click(function () { 
$("#msg").load("hello.txt"); 
}) </script> 
</body> 
</html>
Javascript 相关文章推荐
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
Mar 11 Javascript
JavaScript实现九九乘法表的简单实例
Jun 07 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
Dec 02 Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 Javascript
详解Vue组件之间的数据通信实例
Jun 17 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
Angularjs中date过滤器失效的问题及解决方法
Jul 06 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 Javascript
JavaScript多种图形实现代码实例
Jun 28 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
javascript new fun的执行过程
Aug 05 #Javascript
过虑特殊字符输入的js代码
Aug 05 #Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
Aug 05 #Javascript
javascript new后的constructor属性
Aug 05 #Javascript
FileUpload上传图片(图片不变形)
Aug 05 #Javascript
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 #Javascript
js继承的实现代码
Aug 05 #Javascript
You might like
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python验证企业工商注册码
2015/10/25 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
房地产销售经理岗位职责
2014/01/01 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
林肯就职演讲稿
2014/05/19 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
委托证明范本
2014/11/25 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
2016大一新生军训感言
2015/12/08 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫