`

AJAX 的 XMLHttpRequset的对象池

 
阅读更多

 

ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。

 

代码如下:

 

var XMLHttp = {
    //定义第一个属性,该属性用于缓存XMLHttpRequest对象数组
    XMLHttpRequestPool:[],
    //对象的第一个方法,该方法用于返回一个XMLHttpRequest对象
    getInstance:function(){
        var len = this.XMLHttpRequestPool.length;
        //从XMLHttpRequestPool缓冲池中取出一个空闲的XMLHttpRequest对象
        for(var i=0;i<len;i++){
            //如果XMLHttpRequest的readyState的状态为0或者为4,都表示当前的对象
            //XMLHttpRequest对象为闲置的对象
            if(this.XMLHttpRequestPool[i].readyState==0 ||
                this.XMLHttpRequestPool[i]==4){
                return this.XMLHttpRequestPool[i];
            }
        }
        //如果没有空闲对象,将再次创建一个XMLHttpRequest对象
        this.XMLHttpRequestPool[this.XMLHttpRequestPool.length]=
        this.createXMLHttpRequest();
        return this.XMLHttpRequestPool[this.XMLHttpRequestPool.length-1];
    },
    //创建新的XMLHttpRequest对象
    createXMLHttpRequest:function(){
        var xmlHttpRequest = false;
        //Mozilla,fireFox,Operal浏览器
        if(window.XMLHttpRequest){
            //针对FireFox, Mozillar, Opera, Safari, IE7, IE8
            xmlHttpRequest = new XMLHttpRequest();
 
            //针对某些特定版本的mozillar浏览器的BUG进行修正
            if(xmlHttpRequest.overrideMimeType){
                xmlHttpRequest.overrideMimeType("text/xml");
            }
        }else if(window.ActiveXObject){
            //针对IE6, IE5, IE5.5
            //两个可以用于创建XMLHttpRequest对象的控件名称,保存在js的数组中
            //排在前面的版本较新
            var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
            for(var i = 0; i < activexName.length; i++){
                try {
                    //取出一个控件名进行创建,如果创建成功就终止循环
                    //如果创建失败,会抛出异常,捕捉异常后,可以继续循环,继续尝试创建
                    xmlHttpRequest = new ActiveXObject(activexName[i]);
                    break;
                } catch(e) {
                    xmlHttpRequest = false;                    
                }
            }
            //Mozilla某些版本没有readyState属性
            if(xmlHttpRequest.readyState==null){
                //直接设置readyState为0
                xmlHttpRequest.readyState = 0;
                //没有readyState属性的浏览器,将load动作与下面的函数关联起来
                xmlHttpRequest.addEventListener("load",function(){
                    if(typeof(xmlHttpRequest.onreadystatechange =="function")){
                        xmlHttpRequest.onreadystatechange();
                    }
                },false);
            }
        }
        if (!xmlHttpRequest || typeof XMLHttpRequest == 'undefined') {
            Alert("你的浏览器不支持xmlHttpRequest对象!");
            return;
        }
        return xmlHttpRequest;
    },
    //定义对象的第三个方法,发送请求,参数说明
    //method 为发送请求的方法(POST,GET),地址,数据,回调函数
    sendRequest:function(method,url,data,async,callback){
        var xmlHttpRequest = this.getInstance();
        if(xmlHttpRequest){
            try{
                //加随机数防止缓存,主要目的是防止直接从浏览器读取数据
                if(url.indexOf("?")>0){
                    url+="&time="+new Date().getTime();
                }else{
                    url+="?time="+new Date().getTime();
                }
                //打开与服务器的连接
                xmlHttpRequest.open(method,url,async);
                //设置状态改变的回调函数
                xmlHttpRequest.onreadystatechange = function(){
                    //当服务器的响应完成并获得正常的服务器响应时
                    if(xmlHttpRequest.readyState==4){
                        if(xmlHttpRequest.status==200){
                            callback(xmlHttpRequest);
                        }
                    }
                }
                //如果采用POST请求
                if(method=="POST"){
                    //设置请求的头
                    xmlHttpRequest.setRequestHeader("Content-Type",
                        "application/x-www-form-urlencoded");
                    xmlHttpRequest.send(data);
                }
                //如果采用GET请求
                if(method=="GET"){
                    xmlHttpRequest.send(null);
                }
            }catch(e){
                alert(e);
            }
        }
    }
};
 

 

 

 

大家看到这个xmlHttpRequest 池其实是创建了一个javascript对象,那面调用的时候只需直接调用这个对象的方法即可。

 

调用方法:

把以上代码copy保存到一个js文件里,假设取名ajaxpool.js,html中插入以下代码即可

 

 

<script type=”text/javascript” src=”ajaxpool.js” ></script>
<script type=”text/javascript” >
var requestText; //用于接受响应结果
XMLHttp.sendRequest("GET","getMenu",null,false,function(xmlHttpRequest){requestText=xmlHttpRequest.responseText;});
</script>
 

 

 

XMLHttp.sendrequest()方法共5个参数:

1、请求方式。GETPOST

2、请求URL

3sent的数据,GET方式时一般为NULLPOST方式时,其值为发送的数据

4true异步,false同步

5、回调函数

 

 

通过以上代码就完成了一次Ajax请求,同一页面可多次调用XMLHttp.sendrequest()方法产生多次请求

分享到:
评论

相关推荐

    ajax对象池

    `说明.txt`文件可能是对Ajax对象池实现的详细解释或者使用指南,包括如何初始化对象池,如何从池中获取和归还Ajax对象,以及如何配置对象池的大小和回收策略等。通常,对象池的大小需要根据应用的实际需求进行调整,...

    ajax 对象池,一个页面多个XMLHttpRequest对象

    ajax XMLHttpRequest。。。。。。

    ajax传递list对象数组

    ### AJAX传递List对象数组知识点详解 #### 一、前言 在Web开发中,前后端交互是必不可少的一个环节。AJAX作为一种实现异步加载数据的技术,可以有效地提升用户体验。本篇将详细介绍如何通过AJAX来传递一个List对象...

    ajaxpool,ajax管理,ajax池

    在实际应用中,Ajax池通常是一个JavaScript对象或模块,它维护了一个队列,用于存储待处理的Ajax请求。当一个请求被创建时,它会被添加到队列中。然后,池会按照预设的并发限制(比如,最多同时发送5个请求)来执行...

    Ajax基本对象的属性和方法

    Ajax 基本对象的属性和方法 Ajax 基本对象是指在异步 JavaScript 和 XML(AJAX)技术中使用的基本对象,该对象提供了一些属性和方法来处理 XML 的 DOM 元素和遍历 XML 的 DOM 元素。下面是 Ajax 基本对象的属性和...

    Ajax核心对象XMLHTTPRequest

    Ajax核心对象XMLHTTPRequest详细参数及例子

    ajax实现注册验证+数据库连接池

    2. **Ajax请求**:利用JavaScript的XMLHttpRequest对象或者更现代的Fetch API,向服务器发送异步请求,携带用户名作为参数。 3. **服务器处理**:后端接收到请求,查询数据库中是否有相同的用户名。 4. **响应反馈**...

    简单创建ajax对象

    简单使用创建ajax对象,几乎试用所有浏览器。

    下载json,ajax传送对象的好帮手

    标题中的“下载json,ajax传送对象的好帮手”指的是利用JSON处理和传输AJAX请求中的数据对象。AJAX允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容,极大地提高了用户体验。而JSON因为其...

    jquery的ajax传json对象数组到struts2的action

    本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action,并在后端进行处理。 首先,我们了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    ajax返回json对象.zip

    "Ajax返回JSON对象"这个主题聚焦于Ajax如何处理JSON(JavaScript Object Notation)数据格式,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 1. **Ajax基础**: - **异步通信**:...

    C# ajax和数据库连接池小实例

    下面将详细探讨C#、Ajax以及数据库连接池的相关知识点。 一、C#与Ajax的结合使用 1. C# Web应用基础:C#通常与ASP.NET框架一起使用,构建服务器端的Web应用。通过编写C#代码,开发者可以处理HTTP请求,生成动态...

    建一个XMLHttpRequest对象池

    在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个...解决的办法就是创建一个 XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。本文将为大家介绍具体的解决方法。

    e语言-Ajax XmlHttp对象参考手册

     现在的绝对多数浏览器都增加了对XmlHttp的支持,IE中使用ActiveXObject方式创建XmlHttp对象,其他浏览器如:Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。 资源界面:资源下载:

    【ASP.NET编程知识】ASP.NET使用Ajax返回Json对象的方法.docx

    ASP.NET 使用 Ajax 返回 Json 对象的方法 本文档介绍了使用 ASP.NET 实现 Ajax 返回 Json 对象的方法。通过创建一个 HTML 页面和一个 JS 文件,演示了如何使用 Ajax 提交表单数据并返回 Json 对象。 知识点一:...

    VS2008 AJAX控件介绍 AJAX组成及XMLHttpRequest对象

    通过理解AJAX的组成和XMLHttpRequest对象的工作原理,开发者可以更好地利用这些控件,创建出更动态、更高效的网页应用。在实际开发中,结合VS2008的AJAX控件和AJAX框架,可以大大简化代码编写,提高开发效率。

    ajax对象及json应用

    **Ajax对象及JSON应用** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心是JavaScript对象——XMLHttpRequest,这个对象允许我们与服务器进行...

    ajax ajax原理 ajax代码 ajax编程 ajax学习

    Ajax的核心是JavaScript对象XMLHttpRequest,它允许在不刷新整个页面的前提下与服务器通信。** ### **Ajax 原理** Ajax的原理主要包含以下几个步骤: 1. **创建 XMLHttpRequest 对象**:这是Ajax的基础,现代浏览器...

    Ajax简介Ajax.API

    Ajax 的核心是 JavaScript 对象 XmlHttpRequest。Ajax 采用异步交互过程,在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理—等待—处理—等待缺点。 Ajax 引擎用 JavaScript 语言编写,通常藏...

Global site tag (gtag.js) - Google Analytics