用js创建XMLHttpRequest对象池[转]
//使用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对象池[转]的更多相关文章
- js中XMLHttpRequest对象实现GET、POST异步传输
js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...
- 创建XMLHttpRequest对象
创建XMLHttpRequest对象 XMLHttpRequest对象: 用于在后台与服务器交换数据,可以在不重新加载整个页面的情况下,对页面的部分内容进行更新. 创建XMLHttpRequest对象 ...
- 创建XMLHttpRequest对象方法
~~~ //创建XMLHttpRequest对象 function creatXmlHttpRequest() { var xmlHttp; try{ //非IE浏览器使用 xmlHttp = new ...
- Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- AJAX - 创建 XMLHttpRequest 对象
XMLHttpRequest 是 AJAX 的基础. XMLHttpRequest 对象 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject ...
- js创建xml对象
js创建xml对象 //创建对象 function getDataXML() { var objTds = $("TEXTAREA"); var count = o ...
- 【转】javascript中值传递,地址传递,引用传递的问题(使用js创建list对象时会用到)
function initEditModal_SI(node) { if (node.siArray == undefined) { node.siArray = new Object(); } va ...
- 创建 XMLHttpRequest 对象时IE的兼容问题解决办法
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXO ...
- Ajax学习系列——创建XMLHttpRequest对象
Ajax - 创建XMLHttpRequest对象 首先介绍什么是XMLHttpRequest: XMLHttpRequest是Ajax的基础.中文可以解释为可扩展超文本传输请求.术语缩写为XHR. ...
随机推荐
- FLASH CC 2015 CANVAS (六)如何像FLASH那样实现场景(多canvas)
注意 此系列贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新. swf 项目中,我们可以很容易在一个fla文档里创建多场景.也可以通过多个fla文件发布多个s ...
- js 监听监键盘动作(转)
主要分四个部分 第一部分:浏览器的按键事件 第二部分:兼容浏览器 第三部分:代码实现和优化 第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydo ...
- ackerman递归
定义: n+1 n=0 A(m,n)={A(m-1,1) m=0 A(m-1,A(m,n-1)) n>0,m>0 #include <iostream> #inc ...
- C,C++,Lisp,Java,Perl,Python
(译注:圣经记载:在远古的时候,人类都使用一种语言,全世界的人决定一起造一座通天的塔,就是巴别塔,后来被上帝知道了,上帝就让人们使用不同的语言,这个塔就没能造起来. 巴别塔不建自毁,与其说上帝的分化将 ...
- STRUTS2 标签 循环次数
*<s:property value="menus.size()"/> * <s:if test='menus.size()>8'> sssss ...
- htm Dom对象与 Xml Dom对象的理解
html 是基于Xml的文档规范.是一种特殊的xml文档,这一点很重要 1.xml 文档的操作,java,c#,...各种语言都提供了很好的api对文档进行解析,操作.当然js 也不例外,提供了一系列 ...
- CentOS用yum快速安装nginx
增加nginx源 vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/ ...
- linux的ulimit命令
ulimit命令用来限制系统用户对shell资源的访问. 语法: ulimit [-acdfHlmnpsStv] [size] 选项介绍: -a 显示当前所有的资源限制; -c size: ...
- POJ 2418 各种二叉排序树
题意很明确,统计各个字符串所占总串数的百分比,暴力的话肯定超时,看了书上的题解后发现这题主要是用二叉排序树来做,下面附上n种树的代码. 简单的二叉排序树,不作任何优化(C语言版的): #include ...
- 线程池的应用及Callable接口的使用
public interface Executor { /** * Executes the given command at some time in the future. The comman ...