JavaScript的XMLHttpRequest对象
ajax的核心技术是XMLHttpRequest对象,简称XHR。
//支持IE7及更高的版本
function createXML()
{
if(typeof XMLHttpReqquest!="undefined")
{
return new XMLHttpRequest();
}
else if(typeof ActiveXObject!="undefined")
{
if(typeof arguments.callee.activeXString!="string")
{
var version=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i,len; for(i=0,len=version.length;i<len;i++)
{
try
{
new ActiveXObject(version[i]);
arguments.callee.activeXSting=version[i];
break;
}
catch(ex)
{}
}
}
return new ActiveXObject(arguments.callee.activeXSting);
}
else
{
throw new Error(No XHR object available!);
}
}
函数首先检测原生XHR对象是否存在,如果存在就返回它的新实例。如果不存在就检测ActiveX对象。如果两个对象都不存在就抛出一个错误。
XMLHttpRequest的用法:
在使用XHR对象时,要调用的第一个方法就是open(),open()方法接受三个参数:1,要发送请求的类型(“get”,"post"等) 2,请求的url 3,表示是否发送异步请求的布尔值。
xhr.open("get","test.php",false);//open并不会真的发送请求,而只是启动了请求以备发送。
var xhr=createXHR();
xhr.open("get","test.php",false);
xhe.send(null);
惰性载入函数
没次调用createXHR()都要对浏览器支持的功能进行检查。首先检查XHR,然后检查基于activeX的XHR。还有if语句的判断,没次都要进行判断,肯定必没有if判断的代码,运行速度慢,即使只是if判断。
第一种,惰性载入的方式。
function createXHR(){
if(typeof XMLHttpRequest !=undefined){
createXHR=function(){
return new XMLHttpRequest();
};
} else if(typeof ActiveXObject!=undefined){
createXHR=function(){
if(typeof arguments.callee.activeXString!="string"){
var version=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i,len;
for(i=0;len=version.length,i<len;i++){
try{
new ActiveXObject(version[i]);
arguments.callee.activeXString=version[i];
break;
} catch(ex){
//skip
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
};
} else{
createXHR=function(){
throw new Error("No XHR object available.");
};
}
return createXHR();
第二种在声明函数时就指定适当的函数。
var createXHR=(function(){
if(typeof XMLHttpRequest !=undefined){
return function(){
return new XMLHttpRequest();
};
} else if(typeof ActiveXObject!=undefined){
return function(){
if(typeof arguments.callee.activeXString!="string"){
var version=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i,len;
for(i=0;len=version.length,i<len;i++){
try{
new ActiveXObject(version[i]);
arguments.callee.activeXString=version[i];
break;
} catch(ex){
//skip
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
};
} else{
createXHR=function(){
throw new Error("No XHR object available.");
};
}
return createXHR();
})();
JavaScript的XMLHttpRequest对象的更多相关文章
- Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- PHP. 02®. Ajax异步处理、常见的响应状态、XMLHttpRequest对象及API、ajax的get/post方法、
异步对象 a)创建异步对象 b)设置请求的url等参数 c) 发送请求 d)注册时间 e)在注册的事件中获取返回的内容并修改页面显示的内容 布尔类型不能直接用echo输出 常见的响应状态 Ajax概 ...
- javascript XMLHttpRequest对象全面剖析
转载:http://www.jb51.net/article/23175.htm 一. 引言 异步JavaScript与XML(AJAX)是一个专用术语,用于实现在客户端脚本与服务器之间的数据交互过程 ...
- JavaScript使用浏览器内置XMLHttpRequest对象执行Ajax请求
所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject).XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个 ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
- [Javascript]XMLHttpRequest对象实现下载进度条
摘要 可以通过设置一个XMLHttpRequest对象的responseType属性来改变一个从服务器上返回的响应的数据类型.可用的属性值为空字符串 (默认), "arraybuffer&q ...
- javascript快速入门23--XHR—XMLHttpRequest对象
创建XMLHttpRequest对象 与之前众多DOM操作一样,创建XHR对象也具有兼容性问题:IE6及之前的版本使用ActiveXObject,IE7之后及其它浏览器使用XMLHttpRequest ...
- javascript XMLHttpRequest 对象的open() 方法参数说明
下文是从w3c上摘录下来的,其中参数 method 说明的很简短,不是很理解,所以又找了些资料作为补充.文中带括号部分. XMLHttpRequest.open() 初始化 HTTP 请求参数 语法o ...
- AJAX的核心XMLHttpRequest对象
为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,jQuery,Css...)重新融合程一个新的知识框架.而XMLHttpRequest对象则是其中的重 ...
随机推荐
- Alamofire源码解读系列(五)之结果封装(Result)
本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- 基于vue的多引擎搜索及关键字提示
关键代码: <div class="header-search"> <form id="form" action="http://m ...
- 每天一个Linux命令 6
rpm包管理--yum在线管理 ip地址配置和网络yum源ip地址配置 #setup 使用setup工具 #vi /etc/sysconfig/network-scripts/ifcfg-eth0把O ...
- 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 432 Solved: 270[ ...
- [Spark] - SparkCore程序优化总结
http://spark.apache.org/docs/1.6.1/tuning.html1) 代码优化 a. 对于多次使用的RDD,进行数据持久化操作(eg: cache.persist) b. ...
- eclipse清除运行Maven build...后积累的配置项
1.使用eclipse运行maven命令,经常会积累很多的配置项. 2.清理配置项同样在 Run As ---> Run configurations...中.
- TypeScript设计模式之解释器
看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...
- django进阶补充
前言: 这篇博客对上篇博客django进阶作下补充. 一.效果图 前端界面较简单(丑),有两个功能: 从数据库中取出书名 eg: 新书A 在form表单输入书名,选择出版社,选择作者(多选),输入完毕 ...
- DARK的锁链
Description 无向图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边.Dark有N – 1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径.另外,Dark ...