jQuery的实现原理的模拟代码 -5 Ajax
jQuery的实现原理的模拟代码 -5 Ajax
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下://创建XHR对象varxhr;if(window.XMLHttpRequest){xhr=newXMLHttpReque...

复制代码 代码如下:

// 创建 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教程学习
热门Javascript教程学习
编程开发子分类