1. Ajax与Comet

1.1 XMLHttpRequest对象

IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的。因此在IE中可能存在MSXML2.XMLHttp, MSXML2.XMLHttp.3.0, MSXML2.XMLHttp.6.0,要支持旧浏览器,可以使用如下函数:

function createXHR(){

if(typeof XMLHttpRequest != 'undefined'){

return new XMLHttpRequest();

}else if(typeof ActiveXObject != 'undefined'){

if(typeof arguments.callee.activeXString !="string"){

var versions = ['MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp'],i,len;

for(i =0 ,len=versions.length;i<len;i++){

try{

new ActiveXObject(versions[i]);

arguments.callee.activeXString = versions[i];

break;

}cath(ex){

}

}

}

return new ActiveXObject(arguments.callee.activeXString);

}else{

throw new Error('NO XHR object.');

}

}

1.2 XHR用法

使用XHR对象,第一个方法是open(),第一个参数表示方法,第二个参数表示请求地址,第三个参数表示是否异步传递数据。

第二步调用send()方法,

第三部根据 返回状态判断执行对应方法

(1). 等到服务器响应后,响应数据会自动填充XHR对象的属性。

l responseText:作为响应主体返回的数据

l responseXML:响应内容是XML DOM文档数据,内容类型是“text/xml”或者“application/xml”

l status:响应的状态

l statusText:响应的状态说明

(2). 针对异步请求,可以检测XHR对象的readyState属性,

l 0:未初始化

l 1:启动

l 2:发送

l 3:接收

l 4:完成

var xhr = createXHR();

xhr.onreadystatechange = function(){ //必须在open方法前指定

if(xhr.readystate == 4){

if((xhr.status >=200 && xhr.status < 300)|| xhr.status == 304){

alert(xhr.responseText);

}else{

alert(‘error’);

}

}

}

xhr.open(‘get’,’ex.php’,true);

xhr.send(null);

1.3 GET请求

var xhr = createXHR();

xhr.onreadystatechange = function(){ //必须在open方法前指定

if(xhr.readystate == 4){

if((xhr.status >=200 && xhr.status < 300)|| xhr.status == 304){

alert(xhr.responseText);

}else{

alert(‘error’);

}

}

}

xhr.open(‘get’,’ex.php?uid=xx’,true); //URL地之后传递参数

xhr.send(null);

1.4 POST请求

var xhr = createXHR();

xhr.onreadystatechange = function() { //必须在open方法前指定

if (xhr.readystate == 4) {

if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {

alert(xhr.responseText);

} else {

alert(‘error’);

}

}

}

xhr.open(‘post’, ’ex.php’, true);

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送前指定传输类型

xhr.send(form.data);//参数在send是传输

1.5 跨资源请求

IE8通过XDomainRequest对象支持CORS,其他浏览器通过XHR对象原生支持CORS,图像Ping和JSONP是另外两种跨浏览器通信技术。

21. javacript高级程序设计-Ajax与Comet的更多相关文章

  1. 25. javacript高级程序设计-新兴的API

    1. 新兴的API requestAnimationFrame():是一个着眼于优化js动画的api,能够在动画运行期间发出信号.通过这种机制,浏览器就能够自动优化屏幕重绘操作 Page Visibi ...

  2. 24. javacript高级程序设计-最佳实践

    1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...

  3. 23. javacript高级程序设计-数据存储

    1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...

  4. 22. javacript高级程序设计-高级技巧

    1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...

  5. 20. javacript高级程序设计-JSON

    1. JSON JSON是一种数据格式,存在以下三种类型的值: l 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null,不支持 undefined,例如: ...

  6. 19. javacript高级程序设计-E4X

    1. E4X E4X是对ECMAScript的一个扩展, l 与DOM不同,E4X只用一个类型节点来表示XML中的各个节点 l XML对象中封装了对所有节点都有用的数据和行为.为了表示多个节点的集合, ...

  7. 18. javacript高级程序设计-JavaScript与XML

    1. JavaScript与XML IE采取了下列方式: l 通过ActiveX对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序 l Windows携带了MSXML库,JavaScript ...

  8. 17. javacript高级程序设计-错误处理与调试

    1. 错误处理与调试 l 在可能发生错误的地方使用try-catch方法,可以对错误进行及时的相应 l 使用window.onerror事件处理程序,这种方式可以接受try-catch不能处理的所有错 ...

  9. 16. javacript高级程序设计-HTML5脚本编程

    1. HTML5脚本编程 l 跨文档消息传递API能够让我们在不降低同源策略安全性的前提下,在来至不同的域的文档间传递消息 l 原生拖放功能可以方便的指定某个元素是否可以拖动,并在放置时做出响应.还可 ...

随机推荐

  1. SQL Server2008 表旋转(pivot)技术

    参考资料: http://www.cnblogs.com/xiashengwang/p/3503554.html

  2. hibernate4连接mysql自动创建表之错误

    我在学习Hibernate的过程中,遇到了这样一个错误:JUnit测试通过,但是数据库中却没有创建一个表,控制台的错误信息如下: HHH000388: Unsuccessful: create tab ...

  3. java项目命名规范

    一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写. 如:public class MyFirstClass{} 4. 变量 ...

  4. 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客

    序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可 ...

  5. MongoDB MapReduce学习笔记

    http://cnodejs.org/topic/51a8a9ed555d34c67831fb8b http://garyli.iteye.com/blog/2079158 MapReduce应该算是 ...

  6. Android Studio升级后,开启时遇到tools.jar seems to be not in Android Studio错误?

    工作半年多,电子工程小白一枚.今天上班的时候,与几位同事聊到博客的问题.平时都是在别人的博客里找到问题的解决之妙法, 今天一个冲动之下,我决定也开始用博客记录工作的点滴,暂且当作笔记一用. 出于工作需 ...

  7. 45个实用的JavaScript技巧、窍门和最佳实践

    在这篇文章中,我将分享一组JavaScript的技巧.窍门和最佳实践,这些都是JavaScript程序员应该知晓的,不管他们是使用在浏览器/引擎上,还是服务器端(SSJS——Service Side ...

  8. 自定义Listview

    public class MyListView extends ListView { public MyListView(Context context) { super(context); } pu ...

  9. [codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案

    [codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案 试题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴 ...

  10. Delphi实现窗体内嵌其他应用程序窗体

    实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果. 本文实现的是内嵌一个记事本程序, ...