Ajax与Comet:

1、Ajax技术的核心是XHR(XMLHTTPRequest对象)

创建xhr对象:

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;

}catch(ex){

//跳过

}

}

}

return new ActiveXObject(arguments.callee.activeXString);

}else{

throw new Error("No XHR object available.");

}

}

2、使用XHR对象:open(),send()

1)     open()方法,接收3个参数,要发送的请求类型,请求的URL,表示是否异步发送请求的布尔值

xhr.open("get”,”example.php”,false);

调用open()方法并不会真正发送请求,而只是启动一个请求以备发送

2)     发送特定的请求,必须像下面这样调用send()方法:

xhr.open("get”,”example.php”,false);

xhr.send(null);

send()方法接收一个参数,即要作为请求主体发送的数据,如果不需要通过请求主体发送数据,就必须传入null,这个参数对于有些浏览器来说是必须的,调用send()方法之后,请求就会被分派到服务器

3)     请求同步的时候,js代码会等到服务器响应之后再继续执行,收到响应后,响应的数据会自动填充XHR对象的属性

responseText:作为响应主体被返回的文本

responseXML:如果响应的内容类型是“text/xml“或”application/xml”,该属性中将保存包含着响应数据的XML DOM文档

status:响应的HTTP状态

statusText:HTTP状态的说明

收到响应后,第一步先检查status属性,以确定响应已经成功返回,

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

//将http状态代码为200作为成功的标记

//状态代码为304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本

alert(xhr.responseText);

}else{

alert("Request was unsucessful:"+ xhr.status);

}

4)     发送异步请求,检测XHR对象的readyState属性,表示请求/响应过程的当前活动阶段

属性可取的值:

0:未初始化,尚未调用open()方法

1:启动,已经调用open()方法,但尚未调用send()方法

2:发送,已经调用send()方法,但尚未接收到响应

3:接收,已经接收到部分响应数据

4:完成,已经接收到全部响应数据,而且已经在客服端使用了

必须在调用open()方法之前指定onreadystatechange事件处理程序才能够确保跨浏览器兼容性

var xhr=createXHR();

xhr.onreadystatechange=function(){

if(xhr.readyState==4){

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

alert(xhr.responseText);

}else{

alert("Request was unsucessful:"+ xhr.status);

}

}

};

xhr.open("get","example.js",true);

xhr.send(null);

5)     调用xhr.abort()方法,XHR对象会停止触发事件,而且也不再允许访问任何与响应有关的对象属性

3、HTTP头部信息:每个HTTP请求和响应都会带有相应的头部信息,XHR对象提供了操作这两种头部(请求头部以及响应头部)信息的方法

1)     默认情况下,发送XHR请求的同时,还会发送下列头部信息:

Accept:浏览器能够处理的内容类型

Accept-Charset:浏览器能够显示的字符集

Accept-Encoding:浏览器能够处理的压缩编码

Accept-Language:浏览器当前设置的语言

Connection:浏览器与服务器之间连接的类型

Cookie:当前页面设置的任何Cookie

Host:发出请求的页面所在的域

Referer:发出请求的页面的URI

User-Agent:浏览器的用户代理字符串

2)     使用setRequestHeader()方法可以设置自定义的请求头部信息,接收2个参数:头部字段的名称,头部字段的值,方法放置在open()之后,send()之前

3)     getRequestHeader()方法取得相应的响应头部信息,getAllResponseHeaders()方法可以取得包含所有头部信息的长字符串

var myHeader=xhr.getResponseHeader("MyHeader");

var allHeader=xhr.getAllResponseHeader();

4、查询字符串中的每个参数的名称以及值都需要使用encodeURIComponent进行编码,然后才放到URI的末尾,并且所有的名值对都必须由&分开

xhr.open("get","example.php?name1=value1&name2=value2",true);

function addURLParam(url,name,value){

url+=(url.indexOf("?")==-1 ? "?" : "&");

url+=encodeURIComponent(name)+ "=" +encodeURIComponent(value);

return url;

}

5、post:

var xhr=createXHR();

xhr.onreadystatechange=function(){

if(xhr.readyState==4){

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

alert(xhr.responseText);

}else{

alert("Request was unsucessful:"+ xhr.status);

}

}

};

xhr.open("get","example.js",true);

xhr.setRequestHander("Content-Type","application/x-www-form-urlencoded");

var form=document.getElementById("user-info");

xhr.send(serialize(form));

6、FormData

var data=new FormData();

data.append("name","zhang");

//传入表单元素

var data=new FormData(document.forms[0]);

//直接传给send

xhr.open("get","example.js",true);

var form=document.getElementById("user-info");

xhr.send(new FormData(form));

7、超时设置:

xhr.open("get","example.js",true);

xhr.timeout=1000;   //仅适用于ie8+

xhr.ontimeout=function(){

alert("ddddddddd");

}

xhr.send(null);

8、overrideMimeType()方法可以保证将响应当做Xml而非纯文本来显示

overrideMimeType("text/xml")

9、进度事件:

1)     针对xhr操作:

loadstart:子啊接收到响应的第一个字节时触发

progress:在接收响应期间不断触发

error:在请求发生错误的时候触发

abort:在因为调用abort()方法而终止连接时触发----用于停止正在进行的请求

load:在接收到完整的响应数据时触发

loaded:在通信完成或者触发error,abort,load事件后触发

2)     必须在open之前添加onprogress事件处理程序

var xhr=createXHR();

xhr.onload=function(event){

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

alert(xhr.responseText);

}else{

alert("Request was unsucessful:"+ xhr.status);

}

};

xhr.onprogress=function(event){

var divStatus=document.getElementById("status");

if(event.lengthComputable){

divStatus.innerHTML="Received"+event.position+"of"+event.totalSize+"bytes";

}

//event.lengthComputable表示进度信息是否可用布尔值

//event.position表示已经接收的字节数

//event.totalSize根据Content-Length响应头部确定的预期字节数

};

xhr.open("get","example.js",true);

xhr.send(null);

10、将withCredentials属性设置为true,可以指定某个请求应该发送请求

11、跨浏览器的CORS

js-Ajax与Comet的更多相关文章

  1. [网页设计]Ajax、Comet与Websocket--转

    从http协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式.在 ...

  2. Ajax、Comet与Websocket

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

  3. Ajax、Comet、Websocket、SSE

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

  4. 21. javacript高级程序设计-Ajax与Comet

    1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...

  5. js ajax post提交 ie和火狐、谷歌提交的编码不一致,导致中文乱码

    今天遇到一个问题找了很久发现: 使用js ajax post提交 ie和火狐.谷歌提交的编码不一致,导致中文乱码 //http://www.cnblogs.com/QGC88 $.ajax({ url ...

  6. JavaScript学习总结【12】、JS AJAX应用

    1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...

  7. 简单的前端js+ajax 购物车框架(入门篇)

    其实,一直想把自己写的一些js给总结下,也许是能力有限不能把它完美结合起来.只能自己默默的看着哪些代码,无能为力. 今天在公司实在没有事做,突然就想到写下商城的购物车的前端框架,当然我这里只有购物车的 ...

  8. MVC3.0+knockout.js+Ajax 实现简单的增删改查

    MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...

  9. js+ajax编码三级联动

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

  10. 注册页面手机验证码无跳转接收[html+js+ajax+php]

    [学习笔记] 来源:注册时需要使用短信验证码,但是注册的时候,点击接收验证码时,会产生跳转(尼玛,这不是我想要的啊!o(╥﹏╥)o) 查询资料和看书之后,知道使用js+ajax可以实现,就从网上找了一 ...

随机推荐

  1. 【python】id()函数

    来源:百度知道 >>> a=2.0 >>> b=2.0 >>> id(a) 524440880 >>> id(b) 524440 ...

  2. HDU 4320 Arcane Numbers 1 (质因子分解)

    题目:传送门. 题意:将一个A进制下的有限小数转化为B进制看是否仍为有限小数. 题解:一个A进制的小数可以下次 左移动n位变成A进制整数然后再将其转化为B进制即可 即B^m/A^n要整除,因此A的质因 ...

  3. 一个.xib界面文件中设计有多个View

    一个新建的.xib文件(Xcode's Interface Builder),有一个默认的View,也就是self.view,是主视图 其他新建的View可以在viewDidLoad()函数中使用 [ ...

  4. [Android Pro] APK

    svn updatesvn status ls -alsvn log --limit 8 > RELEASE_NOTE.txt cat RELEASE_NOTE.txt chmod a+x gr ...

  5. 你缺什么(codevs 2928)

    2928 你缺什么  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 继“你幸福吗”之后,央视又推出了“ ...

  6. hdu 1290 切糕

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1290 思路: n条直线最多能将一个平面分成几个区域其递推公式即为:f(n)=f(n-1)+n:递推一下 ...

  7. hud 2602 Bone Collector

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 思路:典型的01背包 #include<stdlib.h> #include< ...

  8. 二、JavaScript语言--JS基础--JavaScript进阶篇--DOM对象 控制HTML元素

    1.认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面 ...

  9. mysql中select五种子句和统计函数

    select 五种子句顺序 where 条件 group by 分组 having 把结果进行再次筛选 order by  排序 limit  取出条目 统计函数  max(列名)  求最大 min( ...

  10. bootstrap的验证和确认对话框

      BootstrapValidator: http://bv.doc.javake.cn/api/   引用 <!-- jquery-confirm.确认对话框 --> <link ...