构建一个pool来管理无刷新页面的xmlhttp对象
在页面上使用ActiveXObject的代价是很大的,如果我们的无刷新页面使用xmlhttp技术,我们或许需要频繁的建立xmlhttp对象,当然我们也可以使用全局变量来cache一个xmlhttp对象实例。但是这样的方法适合于同步方式xmlhttp通信,而对于异步方式xmlhttp通信将会出现问题。由于没有了进程的堵塞,用户可能再次调用同一个xmlhttp实例,如果这时前一个通信未完成,那么就失败了。
建立一个pool来管理页面上的xmlhttp对象实例,最明显的好处就是不会再创建冗余对象,同时也不会出现多个操作在同一个工作的xmlhttp实例上被调用的情况。
具体实现,我们使用一个Array作为pool来存储已创建的xmlhttp对象实例,然后每次调用从pool中去取一个实例。xmlhttp实例通讯完毕后我们不用做任何处置,因为它自身的readyState属性可以标识出它是否可用,如果当时没有空闲的xmlhttp实例,且pool中的实例数小于m_MaxPoolLength,那么就创建一个新的实例并放入pool中。pool的实现代码如下:
var __XmlHttpPool__ =
{
m_MaxPoolLength : 10,
m_XmlHttpPool : [],
__requestObject : function()
{
var xmlhttp = null;
var pool = this.m_XmlHttpPool;
for ( var i=0 ; i < pool.length ; ++i )
{
if ( pool[i].readyState == 4 || pool[i].readyState == 0 )
{
xmlhttp = pool[i];
break;
}
}
if ( xmlhttp == null )
{
return this.__extendPool();
}
return xmlhttp;
},
__extendPool : function()
{
if ( this.m_XmlHttpPool.length < this.m_MaxPoolLength )
{
var xmlhttp = null;
try
{
xmlhttp = new ActiveXObject('MSXML2.XMLHTTP');
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e2) {}
}
if ( xmlhttp )
{
this.m_XmlHttpPool.push(xmlhttp);
}
return xmlhttp;
}
},
GetRemoteData : function(url, callback)
{
this.__receiveRemoteData(url, callback, 'GET', null);
},
PostRemoteData : function(url, callback, data)
{
this.__receiveRemoteData(url, callback, 'POST', data);
},
__receiveRemoteData : function(url, callback, httpmethod, data)
{
var xmlhttp = this.__requestObject();
if ( !xmlhttp )
{
return null;
}
xmlhttp.open(httpmethod, url, true);
xmlhttp.onreadystatechange = function()
{
if ( xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete' )
{
callback(xmlhttp.responseText);
}
};
xmlhttp.send(data);
}
};
#endregion
__XmlHttpPool__提供了两个方法来和服务器通信,一个使用'GET'方法,一个使用'POST'方法,使用它们非常简单,__XmlHttpPool__.GetRemoteData(url, callback)或__XmlHttpPool__.PostRemoteData(url, callback, data)。其中url是服务器地址,callback是处理返回数据(responseText)的回调函数。比如:
function Render(string)
{
if ( string )
{
txbContent.value += string + '/r/n';
}
}
</scirpt>
<textarea rows="40" style="width:100%" id="txbContent"></textarea>
构建一个pool来管理无刷新页面的xmlhttp对象相关推荐
- iOS实现一个包含若干页面和子页面的“打卡”App
iOS实现一个包含若干页面和子页面的"打卡"App 开发环境 Mac OS Objective-C Xcode 实验目的 学习使用纯代码进行UI布局 学习TableView,UIC ...
- github 首页 html,GitHub - merrier/github-html-preview: 一个可以直接预览html页面的chrome插件...
Github HTML Preview 一个可以直接预览html页面的chrome插件 Github HTML Preview provide a quick way to preview the h ...
- 用Flutter构建一个 视频通话联系人管理应用
用Flutter构建一个 视频 / 通话 / 联系人管理 应用 这是编程务实的第三个实验, 要完成一个简单的拨号器.在此需求基础上,我用Flutter添加了一些全新的功能,包括视频通话,观众视角通话, ...
- 用Atlas来实现一个基于AJAX的无刷新Chatroom
Atlas是微软提供的一个AJAX工具包,封装了实现AJAX的所需的Java Script,使用起来非常简单,可以直接调用Web Service方法,然后通过Asynchronous Call的方式回 ...
- VuePress构建一个文档管理网站
序言 目前无论笔记还是项目文档,大部分我都会通过 Markdown来记录,并且大部分文档写完都只存在自己电脑上,每次查找起来都需要耗费一些时间 自己的写的一部分技术教程由于初次记录时了解知识不多,内容 ...
- 不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug
SwiftUI的tabview非常好用,简单几行就能构建一套基于Tab的App.但是SwiftUI目前tabview存在一个小bug,当tab切换时内部中的list或NavigationLink将会重 ...
- 防止恶意刷新页面的Java实现
在很多对安全性要求较高的项目中,需要提供至少一种对整个项目的安全控制方案,常用的比如身份认证.访问控制.安全审计等等.由于设计不合理而导致的安全问题可能会给项目带来非常大的隐患,正是因为如此,安全问题 ...
- java中刷新页面的js,[Java教程]js页面刷新之实现框架内外刷新(整体、局部)
[Java教程]js页面刷新之实现框架内外刷新(整体.局部) 0 2016-10-12 12:00:56 这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷 ...
- 不刷新页面的tab_现代 Web 页面开发流程
通常来说,Web页面开发的流程大致是这样的:设计师(设计师不是美工,就像程序员不是码农一样)提供设计稿,通常是图片格式.然后前端的开发人员(在ThoughtWorks我们称之为UI Dev)来手工的将 ...
- C# Asp.net 中的Treeview 点击不刷新页面的
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="huozhu.aspx.cs&q ...
最新文章
- Vim对中文编码的支持[转]
- Using string literals in ref attributes is deprecated
- php 回复id同过session 任意获取id不通过a,PHP会话ID相同但变量丢失
- 图书查找java_java第三季第一章:查找图书信息实现
- 八十三、Eureka实现相互注册
- 伺服怎么接单相220伏_乐利网带你认识伺服电机及工作原理
- “一键删除中国App”应用海外走红,下载量破500万!谷歌:我先把你删除了
- qq消息服务器延时,QQ聊天消息丢失或延迟的原因分析
- nginx下根据指定路由重定向
- 16位顶尖对冲基金大佬:畅谈量化投资的下个10年!
- 软考网络规划设计师备考经验分享
- 激光导航技术是如何实现的?
- 修复下载后已发生损坏的压缩包(.rar)文件
- 3、RDA8910(4GCAT1)CSDK二次开发:GPIO输入详解
- 啦啦啦啦啦_开放组织读书俱乐部:啦啦队长如何设定方向
- 提问的智慧-如何明智到找到想要的答案
- 【相机】(2)——WebView中打开相机、文件选择器的问题和解决方法
- 大数据应用统一集成平台CDAP简介
- 大四毕业生想要在职考研
- android程序如何滤波,android – 卡尔曼滤波器:如何使用它没有“状态转换模型”?...
热门文章
- 【用电量预测】基于matlab SVM用电量预测【含Matlab源码 103期】
- 【车间调度】基于matlab遗传算法求解车间调度问题【含Matlab源码 070期】
- 【气动学】基于matlab内弹道【含Matlab源码 057期】
- SPSS反向题处理(图文+数据集)【SPSS 011期】
- ideal pom文件安装到maven库中_不装 maven 直接使用 IntelliJ 的插件来把本地 jar 包加入到 maven 仓库...
- 边缘计算中高效ML的EEoI
- matlab fullfile函数
- Windows电脑安装Linux系统的方法-Ubuntu版
- linux6.5禁用防火墙,Centos6.5,Centos7分别关闭selinux和防火墙
- HTML5标准学习 – 简介