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. SmartRoute之大规模消息转发集群实现

    消息转发的应用场景在现实中的应用非常普遍,我们常用的IM工具也是其中之一:现有很多云平台也提供了这种基础服务,可以让APP更容易集成相关功能而不必投入相应的开发成本.对于实现这样一个简单功能并不复杂, ...

  2. 3891: [Usaco2014 Dec]Piggy Back

    3891: [Usaco2014 Dec]Piggy Back Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 116  Solved: 92[Subm ...

  3. 很污的机器学习:从xhamster网站找到喜欢的片子

    前言 最近迷上了看黄片(大雾).每次总是去搜索想看的片子,什么asian porn anal pussy 什么的我都不知道. 搜索着搜索着我手也累了,而且我喜欢的片子也是有一定的特征的,我不想把所有的 ...

  4. Robots协议

       Robots协议 什么是robots? Robots文件:网站和搜索引擎之间的一个协议. 用来防止搜索引擎抓取那些我们不想被搜索引擎看到的隐私内容. Robots文件告诉蜘蛛什么是可以被查看的. ...

  5. 推荐三款日期选择插件(My97DatePicker+jquery.datepicker+Mobiscroll)

    1.My97DatePicker 纯原生JS,专注于PC端,支持IE6+:页面上只需要引入WdatePicker.js文件,但是My97DatePicker整个目录是一个整体,最好不要破坏里面的目录结 ...

  6. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  7. Python中的日期和时间

    感觉C语言作为一门编程的入门语言还是很好的,相比较之下,Python为代表的一些语言,适合很多非计算机专业的编程入门学习. Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换 ...

  8. Servlet+jsp的分页案例

    查询的分页,在web中经常用到.一般,分页要维护的信息很多,我们把这些相关的信息,分装到一个类中,PageBean.具体如下: package cn.itcast.utils; import java ...

  9. yii2.0框架where条件的使用

    在yii框架中,where条件的使用多种多样,下面就和大家介绍几种常用有效的使用方法 1. ['type' => 1, 'status' => 2] //等于 (type = 1) AND ...

  10. supervisor的集中化管理搭建

    1.supervisor很不错,可惜是单机版,所以上github上找了个管理工具supervisord-monitor. github地址: https://github.com/mlazarov/s ...