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 相关文章推荐
IE/FireFox具备兼容性的拖动代码
Aug 13 Javascript
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 Javascript
js当一个变量为函数时 应该注意的一点细节小结
Dec 29 Javascript
表单元素的submit()方法和onsubmit事件应用概述
Feb 01 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
Node.js五大应用性能技巧小结(必须收藏)
Aug 09 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
vue如何获取自定义元素属性参数值的方法
May 14 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
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
php简单实现快速排序的方法
2015/04/04 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
javascript实现数独解法
2015/03/14 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
django中的数据库迁移的实现
2020/03/16 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
学生干部的自我评价分享
2014/01/18 职场文书
入学生会自荐书范文
2014/02/05 职场文书
物业经理自我鉴定
2014/03/03 职场文书
电钳工人个人求职信
2014/05/10 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python