//使用literal语法定义一个对象:XMLHttp
var XMLHttp =
{
//定义第一个属性,该属性用于缓存XMLHttpRequest对象的数组
XMLHttpRequestPool: [],
//对象的第一个方法,该方法用于返回一个XMLHttpRequest对象
getInstance:function()
{
// 从XMLHttpRequest对象池中取出一个空闲的XMLHttpRequest
for (var i = 0; i < this.XMLHttpRequestPool.length; i ++)
{
//如果XMLHttpReuqest的readyState为0,或者为4,
//都表示当前的XMLHttpRequest对象为闲置的对象
if (this.XMLHttpRequestPool[i].readyState == 0 ||
this.XMLHttpRequestPool[i].readyState == 4)
{
return this.XMLHttpRequestPool[i];
}
}
//如果没有空闲的,将再次创建一个新的XMLHttpRequest对象
this.XMLHttpRequestPool[this.XMLHttpRequestPool.length]
= this.createXMLHttpRequest();
//返回刚刚创建的XMLHttpRequest对象
return this.XMLHttpRequestPool[this.XMLHttpRequestPool.length - 1];
},
//创建新的XMLHttpRequest对象
createXMLHttpRequest:function()
{
//对于DOM 2 规范的浏览器
if (window.XMLHttpRequest)
{
var objXMLHttp = new XMLHttpRequest();
}
//对于Internet Explorer浏览器
else
{
//将Internet Explorer内置的所有XMLHTTP ActiveX控制设置成数组
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
//依次对Internet Explorer内置的XMLHTTP控件初始化,尝试创建XMLHttpRequest对象
for(var n = 0; n < MSXML.length; n ++)
{
try
{
//如果可以正常创建XMLHttpRequest对象,使用break跳出循环
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e)
{
}
}
}
//Mozilla某些版本没有readyState属性
if (objXMLHttp.readyState == null)
{
//直接设置其readyState为0
objXMLHttp.readyState = 0;
//对于哪些没有readyState属性的浏览器,将load动作与下面的函数关联起来
objXMLHttp.addEventListener("load", function ()
{
//当从服务器加载数据完成后,将readyState状态设为4
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function")
{
objXMLHttp.onreadystatechange();
}
}, false);
}
return objXMLHttp;
},
//定义对象的第三个方法: 发送请求(方法[POST,GET], 地址, 数据, 回调函数)
sendRequest: function (method, url, data, callback)
{
var objXMLHttp = this.getInstance();
with(objXMLHttp)
{
try
{
//增加一个额外的randnum请求参数,用于防止IE缓存服务器响应
if (url.indexOf("?") > 0)
{
url += "&randnum=" + Math.random();
}
else
{
url += "?randnum=" + Math.random();
}
//打开与服务器的连接
open(method, url, true);
//对于使用POST请求方式
if (method == "POST")
{
// 设定请求头
setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
send(data);
}
//对于采用GET请求
if (method == "GET")
{
send(null);
}
//设置状态改变的回调函数
onreadystatechange = function ()
{
//当服务器的相应完成时,以及获得了正常的服务器响应
if (objXMLHttp.readyState == 4 &&
(objXMLHttp.status == 200 ||
objXMLHttp.status == 304))
{
//当响应时机成熟时,调用回调函数处理响应
callback(objXMLHttp);
}
}
}
catch(e)
{
alert(e);
}
}
}
};

网上转过来, 当是笔记

用js创建XMLHttpRequest对象池[转]的更多相关文章

  1. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  2. 创建XMLHttpRequest对象

    创建XMLHttpRequest对象 XMLHttpRequest对象: 用于在后台与服务器交换数据,可以在不重新加载整个页面的情况下,对页面的部分内容进行更新. 创建XMLHttpRequest对象 ...

  3. 创建XMLHttpRequest对象方法

    ~~~ //创建XMLHttpRequest对象 function creatXmlHttpRequest() { var xmlHttp; try{ //非IE浏览器使用 xmlHttp = new ...

  4. Ajax 学习之创建XMLHttpRequest对象------Ajax的核心

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. AJAX - 创建 XMLHttpRequest 对象

    XMLHttpRequest 是 AJAX 的基础. XMLHttpRequest 对象 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject ...

  6. js创建xml对象

    js创建xml对象 //创建对象 function getDataXML() {     var objTds = $("TEXTAREA");     var count = o ...

  7. 【转】javascript中值传递,地址传递,引用传递的问题(使用js创建list对象时会用到)

    function initEditModal_SI(node) { if (node.siArray == undefined) { node.siArray = new Object(); } va ...

  8. 创建 XMLHttpRequest 对象时IE的兼容问题解决办法

    为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXO ...

  9. Ajax学习系列——创建XMLHttpRequest对象

    Ajax - 创建XMLHttpRequest对象 首先介绍什么是XMLHttpRequest: XMLHttpRequest是Ajax的基础.中文可以解释为可扩展超文本传输请求.术语缩写为XHR. ...

随机推荐

  1. HttpServletResponse 学习

    1: 利用Response向浏览器输出中文: private void test1(HttpServletResponse response) throws IOException { String ...

  2. chrome的input默认样式黄色背景以及选中加粗的边框处理

    问题描述: chrome输入用户名和密码,然后浏览器自己有记忆功能,等再次登录的时候,他会显示chrome默认的黄色背景色,还有选中时周围会有很粗的边框 解决方案: 去掉黄色背景,给input添加au ...

  3. spring常用的工具类

    spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...

  4. HttpURLConnection请求接口

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; ...

  5. OpenGL的几何变换4之内观察全景图

    上一次写了OpenGL的几何变换3之内观察全景图 上次采用的是图片分割化方式,这次采用数据分割化方式. 先说下思路,数据分割化方式呢,是只读取一张图片imgData,然后通过glTexCoord2f( ...

  6. Java troubleshooting guide

    http://www.oracle.com/technetwork/java/javase/toc-135973.html --不同的 OutOfMemoryError/内存溢出,以及相关的解决

  7. 利用ITextSharp导出PDF文件

    最近项目中需要到处PDF文件,最后上网搜索了一下,发现ITextSharp比较好用,所以做了一个例子: public string ExportPDF() { //ITextSharp Usage / ...

  8. An unknown server-side error occurred while processing the command.处理

    在调用resetAPP()时,报错:An unknown server-side error occurred while processing the command. 怎么解决呢?请看: 额,Ap ...

  9. win8style布局

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  10. virtualbox macosx10.9改变分辨率方法

    VBoxManage setextradata "osx10.9" VBoxInternal2/EfiGopMode 5 VBoxManage setextradata " ...