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对象的更多相关文章

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

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

  2. PHP. 02®. Ajax异步处理、常见的响应状态、XMLHttpRequest对象及API、ajax的get/post方法、

    异步对象 a)创建异步对象 b)设置请求的url等参数 c)  发送请求 d)注册时间 e)在注册的事件中获取返回的内容并修改页面显示的内容 布尔类型不能直接用echo输出 常见的响应状态 Ajax概 ...

  3. javascript XMLHttpRequest对象全面剖析

    转载:http://www.jb51.net/article/23175.htm 一. 引言 异步JavaScript与XML(AJAX)是一个专用术语,用于实现在客户端脚本与服务器之间的数据交互过程 ...

  4. JavaScript使用浏览器内置XMLHttpRequest对象执行Ajax请求

    所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject).XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个 ...

  5. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  6. [Javascript]XMLHttpRequest对象实现下载进度条

    摘要 可以通过设置一个XMLHttpRequest对象的responseType属性来改变一个从服务器上返回的响应的数据类型.可用的属性值为空字符串 (默认), "arraybuffer&q ...

  7. javascript快速入门23--XHR—XMLHttpRequest对象

    创建XMLHttpRequest对象 与之前众多DOM操作一样,创建XHR对象也具有兼容性问题:IE6及之前的版本使用ActiveXObject,IE7之后及其它浏览器使用XMLHttpRequest ...

  8. javascript XMLHttpRequest 对象的open() 方法参数说明

    下文是从w3c上摘录下来的,其中参数 method 说明的很简短,不是很理解,所以又找了些资料作为补充.文中带括号部分. XMLHttpRequest.open() 初始化 HTTP 请求参数 语法o ...

  9. AJAX的核心XMLHttpRequest对象

    为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,jQuery,Css...)重新融合程一个新的知识框架.而XMLHttpRequest对象则是其中的重 ...

随机推荐

  1. JNI之C初探

    JNI是Java Native Interface的缩写,从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI一开始是为了本地已编译语言,尤其 ...

  2. 1295: [SCOI2009]最长距离

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 960  Solved: 498[Submit][Status ...

  3. 九度OJ题目1080:进制转换(java)使用BigInteger进行进制转换

    题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成 ...

  4. css 超出隐藏显示...

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  5. ubuntu中文输入问题

    因为硬盘版的一些缺陷,我狠心的把windows8覆盖为ubuntu 13.10,用u盘安装,除了分区稀里糊涂的还不知到怎么分,其他问题就是汉字的输入问题了,因为之前选了english-US 后来就没有 ...

  6. html中submit和button的区别(总结) [ 转自欣步同学 ]

    html中submit和button的区别(总结) submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证 ...

  7. Untiy文档总结(1)-Profiling

    这段时间上班了,不是什么大公司,虽说很闲但是不能断了学习,就开始看优化有关的文档,虽说自己英语渣的要死,但也要读下去,逼着自己翻译完了,里面有抄Unity圣典的,但自己是看Unity5.5文档写的,只 ...

  8. Linux之nc命令详解

    nc是一个强大的网络工具,可以通过yum安装 [root@LB2 ~]# which nc /usr/bin/which: no nc in (/usr/local/sbin:/usr/local/b ...

  9. 配置linux实现路由功能

    说明: 主机1是内网的数据存储服务器,只有一块网卡10.0.0.2: 主机2是web服务器,有两块网卡,一块面向内网10.0.0.3,一块面向外网192.168.220.136: (因为是在虚拟机的环 ...

  10. Intellij IDEA中文乱码解决

    界面乱码 原因:IDEA默认设置界面的字体不支持中文 解决:修改为支持中文的字体,建议字体Microsoft Yahei UI.大小11,具体操作File -> Setting -> Ap ...