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. debian+nginx配置初探--php环境、反向代理和负载均衡

    配置nginx的PHP环境 安装nginx sudo apt-get install nginx 安装nginx就可以通过下面地址来访问了:http://localhost/ 安装php sudo a ...

  2. python服务器环境搭建(1)——本地服务器准备

    去年十月底到新公司上班,由于公司旧系统存在各种问题同时不便于扩展,而公司领导对17年寄予很大的期望,用户量.收入要上一个新台阶,我经过全面评估后,决定全部用python重构过,开发一个基于微服务架构的 ...

  3. KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-handlebars

    koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...

  4. mybatis基础学习3---特殊sql语句(备忘)

    1: 2: 3:resultMap的用法

  5. Lambda&Java多核编程-6-方法与构造器引用

    在Lambda&Java多核编程-2-并行与组合行为一文中,我们对Stream<Contact>里的每一位联系人调用call()方法,并根据能否打通的返回结果过滤掉已经失效的项. ...

  6. iOS回顾笔记(07) -- UITableView的使用和性能优化

    iOS回顾笔记(07) -- UITableView的使用和性能优化 如果问iOS中最重要的最常用的UI控件是什么,我觉得UITableView当之无愧!似乎所有常规APP都使用到了UITableVi ...

  7. redis 3.2 报错 Redis protected-mode 配置文件没有真正启动

    (error) DENIED Redis is running in protected mode because protected mode is enabled Redis protected- ...

  8. 使用cmd命令打开Python文件式程序方法

    首先:需要确定已编好的Python程序的存储路径:(即在哪个磁盘,哪个文件中) 其次:打开cmd命令,输入该程序所在磁盘,敲回车键:(例如其存储在E盘,则输入“E:”,敲回车键.) 然后:输入pyth ...

  9. 如何进行SQL性能优化

    在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...

  10. SEQ序号与ACK序号理解总结

    备查 SEQ序号与ACK序号理解总结