21. javacript高级程序设计-Ajax与Comet
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的更多相关文章
- 25. javacript高级程序设计-新兴的API
1. 新兴的API requestAnimationFrame():是一个着眼于优化js动画的api,能够在动画运行期间发出信号.通过这种机制,浏览器就能够自动优化屏幕重绘操作 Page Visibi ...
- 24. javacript高级程序设计-最佳实践
1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...
- 23. javacript高级程序设计-数据存储
1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...
- 22. javacript高级程序设计-高级技巧
1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...
- 20. javacript高级程序设计-JSON
1. JSON JSON是一种数据格式,存在以下三种类型的值: l 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null,不支持 undefined,例如: ...
- 19. javacript高级程序设计-E4X
1. E4X E4X是对ECMAScript的一个扩展, l 与DOM不同,E4X只用一个类型节点来表示XML中的各个节点 l XML对象中封装了对所有节点都有用的数据和行为.为了表示多个节点的集合, ...
- 18. javacript高级程序设计-JavaScript与XML
1. JavaScript与XML IE采取了下列方式: l 通过ActiveX对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序 l Windows携带了MSXML库,JavaScript ...
- 17. javacript高级程序设计-错误处理与调试
1. 错误处理与调试 l 在可能发生错误的地方使用try-catch方法,可以对错误进行及时的相应 l 使用window.onerror事件处理程序,这种方式可以接受try-catch不能处理的所有错 ...
- 16. javacript高级程序设计-HTML5脚本编程
1. HTML5脚本编程 l 跨文档消息传递API能够让我们在不降低同源策略安全性的前提下,在来至不同的域的文档间传递消息 l 原生拖放功能可以方便的指定某个元素是否可以拖动,并在放置时做出响应.还可 ...
随机推荐
- [工具]Swagger-api接口文档描述
摘要 工作中经常的用到webapi,之前都是提供的使用postman模拟请求的截图,非常的不方便,如果能在项目中集成一个在线查看接口说明的地方,肯定更方便更直观.在网上看到swagger这个组件,界面 ...
- 手机注册获取验证码的PHP代码
php代码 <?php require dirname(__FILE__).'/include/common.inc.php';//这是在cms2008下面做的测试 header("c ...
- Android 环境配置
一.开发环境配置 1.使用 eclipse 需要下载安装 Android SDK.Eclipse.ADT 插件. 也可以直接下载整合好的 ADT Bundle 包,下载地址: http://devel ...
- 【Solr】solr的增删改查
目录 创建工程 增 删 改 查 高量查询 回到顶部 创建工程 普通的java web工程即可,我采用的是spring mvc! 回到顶部 增 @Autowired private SolrServer ...
- 【C语言入门教程】2.7 表达式
表达式由运算符.常量及变量构成,C语言的表达式基本遵循一般代数规则.有几种运算法则是 C 语言表达式特有的. 2.7.1 表达式中的类型转换 同一表达式中的不同类型常量及变量在运算时需要变量为同一数据 ...
- linux C之getchar()非阻塞方式
参考链接: http://blog.csdn.net/zydlyq/article/details/50963360 #include "../include/CommUart.h" ...
- C++ 模拟虚拟键盘按键表
键盘VK键值列表 /* Virtual Keys, Standard Set*/ VK_LBUTTON 0x01 VK_RBU ...
- centos下redis的安装
1.下载redis的安装包 http://download.redis.io/releases/redis-3.2.0.tar.gz 2.把安装包放到/opt/src/目录(看个人喜好)下 3.执行t ...
- docker镜象
1.安装好docker后,用docker命令的时候有时候会报错:Post http:///var/run/docker.sock/v1.19/images/create?fromImage=ubunt ...
- HDU 1232 并查集/dfs
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1232 我的第一道并查集题目,刚刚学会,我是照着<啊哈算法>这本书学会的,感觉非常通俗易懂,另 ...