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 {
//判断是否能成功创建当前版本的ActiveObject
new ActiveXObject(versions[i]);
arguments.callee.ActiveXString =versions[i]; //如果能设置当前对象的参数
break;
} catch (error) {
//跳过
}
}
}
return new ActiveXObject(arguments.callee.ActiveXString); //根据当前函数的参数创建ActiveXObject
}
else{
throw new Error('No XHR object avilable.');
}
} //创建 xhr var xhr = createXHR(); xhr.onreadyStatechange =function(){
if(xhr.readySate ==4){
if(xhr.status>=200 && xhr.status<300|| xhr.status==304){
var responseText = xhr.responseText;
}else{
//请求未正常得到结果
alert('Request was unsuccessful:'+xhr.status);
}
}
}
xhr.open('get','example.php',false); // 参数 get/post url async
xhr.send(null); //send接收请求主体发送的数据,如果get 可以设置成null
xhr.abort(); //取消请求 //21.1.2 HTTP头部信息 xhr.setRequestHeader('MyHeader','MyValue'); //设置请求头信息 //post 提交
xhr.open('post','url',true);
var form = document.getElementById('user-info');
xhr.send(serialize(form)); //序列化form表单数据并且提交表单 //21.2.1 FormData
//为优化post 提交xmlhttprequest定义了FormData
var data =new FormData();
data.append('name','Nicholas');
xhr.send(data); var form =document.getElementById('user-info');
xhr.send(new FormData(form)); //21.2.2 超时设定
xhr.timeout =1000; //设置1秒
xhr.ontimeout =function(){
alert('Request did not return in a second');
} //21.2.3 overrideMimeType() 方法
xhr.overrideMimeType('text/xml'); //强迫请求对象将响应当着XML而非纯文本处理 //21.3 进度事件 //loadstart 在接收到响应数据的第一个字节触发
//progress 在接收响应期间持续不断触发
//error 在请求发生错误时触发。
//abort 在因为调用abort() 方法而终止链接时触发
//load 在接收到完整的响应数据时触发
//loadend 在通信完成或触发 error abort 或 load 事件后触发 xhr.onload =function(){ }
xhr.onprogress =function(){ } //21.4 跨源资源共享 //跨域安全是服务端设置的,并非请求端可以设置跨域
//Access-Control-Allow-Origin:http://www.nczonline.net
//如果服务端认可这个请求源,则在头部中回发相同的源信息 或者可以回发 Access-Control-Allow-Origin:"*" //21.4.1 IE对CORS的实现 var xdr = new XDomainRequest(); //21.4.3 Preflighted Requests
//通过设置请求头信息让服务端判定是否支持该请求
// Access-Control-Allow-Origin:http://www.nczonline.net
// Access-Control-Allow-Methods:POST,GET
// Access-Control-Allow-Headers:NCZ
// Access-Control-Allow-Age:1728000 //21.4.4 带凭据的请求
//Access-Control-Allow-Crendentials:true //21.5 其他跨域技术
//21.5.1 图像ping
var img =new Image();
img.onload =img.onerror =function(){
alert('Done!');
}
img.src ='http://www.example.com/text?name=Nicholas'; //21.5.2 JSONP
//通过脚本加载方式实现跨域,因为script与img 类似都可以不受跨域限制
//<script src='http://localhost:9090/student?callback=showData'><\/script>
//服务端返回 showData({name:'mas'}); //构建一个 JSONP 格式的函数执行体,回到客户端就会执行客户端showData函数实现跨域 //21.5.3 Comet //参看示例 https://www.iteye.com/blog/raising-2271869 //21.5.4 服务器发送事件 var source = new EventSource('url');
source.open();
source.onmessage =function(event){
var data = event.data;
};
source.close(); // 21.5.5 Web Sockets var socket = new WebSocket('ws://www.example.com/server.php');
// 实例化WebSocket对象后,浏览器就会马上尝试建立链接,websocket也有一个代表当前状态的
// readyState 属性 属性值分别为 WebSocket.OPENING(0) 正在建立链接
//WebSocket.OPEN(1) 已经建立链接
//WebSocket.CLOSEING(2) 正在关闭链接
//WebSocket.CLOSE(3) 已经关闭连接 socket.send('hello world!');
var message ={
time:new Date(),
text:"Hello World!",
clientId:'asdfp8734rew'
};
socket.send(JSON.stringify(message));
//从服务端接收消息
socket.onmessage =function(event){
var data = event.data;
//处理逻辑
}; socket.onopen =function(event){ };
socket.onerror =function(event){ };
socket.onclose =function(event){
//onclose事件三个特有属性
//event.wasClean(boolean值,表示是否已经关闭)
// event.code(服务器返回的数值状态码)
// event.reason (服务器返回的消息)
}

  

javascript权威指南第21章 Ajax和Comet的更多相关文章

  1. javascript权威指南第11章 DOM扩展

    //javascript 权威指南 第三版 第11章 DOM扩展 //取得body元素 var body = document.querySelector("body"); //取 ...

  2. 【笔记】javascript权威指南-第六章-对象

    对象 //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...

  3. 【笔记】javascript权威指南-第三章-类型,值和变量

    javascript中的原始类型和对象类型(基本类型和引用类型) //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.27   计算机程序运行时需要对值(value ...

  4. javascript权威指南第22章高级技巧

    HTML <!DOCTYPE html> <html> <head> </head> <body> <div style=" ...

  5. javascript权威指南第16章 HTML5脚本编程

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  6. javascript权威指南第13章 事件示例代码

    html 部分 <!DOCTYPE html> <html> <head> <title>Event Bubling Example</title ...

  7. 《javascript高级程序设计》第21章 Ajax和Comet

    21.1 XMLHttpRequest 对象  The XMLHttpRequest Object 21.1.1 XHR 的用法 XHR Usage 21.1.2 HTTP 头部信息 XHR Head ...

  8. JavaScript权威指南--第3章 类型、值和变量

    在编程语言中,能够表示并操作的值(value)的类型称作数据类型(type).使用变量来储存值.JavaScript中数据类型有两种:原始类型(primitive type/基本数据类型)和对象类型( ...

  9. JavaScript权威指南第02章 词法结构

    词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...

随机推荐

  1. zblog安装环境介绍?zblog安装需要什么环境

    最近在群里看到很的多人有在问:“安装zblog需要什么环境?”,其实这个问题在zblog官网的程序下载页面有说明,但是不太详细,那么本文的目的就是来给大家介绍下zblog安装环境详细说明. zblog ...

  2. django使用pyecharts(2)----django加入echarts_前后台分离

    二.Django 中使用 pyecharts. 前后端分离 1.安装 djangorestframework linux pip3 install djangorestframework window ...

  3. PAT(B) 1059 C语言竞赛(C)

    题目链接:1059 C语言竞赛 (20 point(s)) 题目描述 C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 冠军将赢得一份" ...

  4. 【Linux】一步一步学Linux——虚拟机安装和卸载(05)

    目录 00. 目录 01. Workstation Pro 15.0安装简介 02. Windows 主机上安装 Workstation Pro 15.0 03. Linux 主机上安装 Workst ...

  5. JDBC连接池的testQuery/validationQuery设置

    在<Tomcat中使用Connector/J连接MySQL的超时问题>帖子中想要增加对连接池中连接的测试/验证,防止数据库认为连接已死而Web应用服务器认为连接还有效的问题,Mysql文档 ...

  6. Vue使用指南(二)

    '''1.指令 ***** 文本指令 属性指令 方法(事件)指令 表单指令 条件指令 循环指令 2.组件 *** 局部组件 全局组件 父子组件间的交互''' 文件指令 <body> < ...

  7. hoj 棋盘问题 状压入个门

    大概题意是:有一个n*m的棋盘,在这个棋盘里边放k个旗子,要求每一行每一列都不能存在一对旗子相邻,问最后总共的方案数. 我们先来考虑个简单的,假如说只有一行,要求在这一行里边填充k个旗子,要求任意两个 ...

  8. VS.NET(C#)--1.4项目与解决方案

    项目与解决方案 项目 除创建网站,VS2005可创建项目.然后把项目放入解决方案中.VS2005可编译很多类型项目,分别是: 1.Windows应用程序 --在用戶计算机上运行的客户端应用程序,可显示 ...

  9. RabbitMQ消息队列入门(一)——RabbitMQ消息队列的安装(Windows环境下)

    一.RabbitMQ介绍1.RabbitMQ简介RabbitMQ是一个消息代理:它接受和转发消息.你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收 ...

  10. c++中配置多个环境的格式

    例:环境1=$(QTDIR)\bin 环境2=$(PATH) 环境3=E:\软件\办公\Vimba_2.1\VimbaCPP\Bin\Win64 具体配置为 PATH=$(QTDIR)\bin%3b$ ...