JS复习:二十一章
一、XHR对象
Ajax( )对象的核心技术就是XMLHttpRequest对象。
二、XHR的用法
在使用XHR对象时,要调用的第一个方法是open( ),它接受3个参数:要发送的请求类型("get"、"post")、请求的URL和表示是否异步发送请求的布尔值。下面就是调用这个方法的例子:
xhr.open("get","example.php","false");
要发送特定的请求,必须像下面这样调用send( )方法:
xhr.open("get","example.txt","false";);
xhr.send(null);
在接收到响应之前还可以调用abort( )方法来取消异步请求:xhr.abort( );
三、GET请求
使用GET请求经常会发生一个错误,就是查询字符串的格式有问题。查询字符串中每个参数的名称和值都必须使用encodeURIComponent( )进行编码,然后才能放到URL的末尾;而且所有名-值对儿都必须由和号(&)分隔,如下面的例子所示。
xhr.open("get","example.php?name1=value1&name2=value2",true);
四、POST请求
POST请求应该把数据作为主体提交,而GET请求传统上不是这样。POST请求的主题可以包含非常多的数据,而且格式不限。在open( )方法第一个参数的位置传入"post",就可以初始化一个POST请求。
xhr.open("post","example.php",true);
五、XML2级
1.FormData
现代Web应用中频繁使用的一项功能就是表单数据的序列化。FormData为序列化表单以及创建与表单格式相同的数据提供了便利。下面的代码创建了一个FormData对象,并向其中添加了一些数据。
var data=new FormData( ); data.append("name","Nicholas");
这个append( )方法接收两个参数:键和值,分别对应表单字段的名字和字段中包含的值。而通过向FormData构造函数中传入表单元素,也可以用表单元素的数据预先向其中填入键值对:
var data=new FormData(document.forms[0]);
创建了FormData的实例后,可以将它直接传给XHR的send( )方法,如:xhr.send(new FormData(form));
2.超时设定
IE8为XHR对象添加了一个timeout属性,表示请求在等待多少毫秒之后就终止。在给timeout设置一个数值后,如果在规定的时间内浏览器还没有接收到响应,就会触发timeout事件。
3.overrideMimeType( )方法
overrideMimeType( )方法用于重写XHR响应的MIME类型。比如,服务器返回的MIME类型是text/plain,但数据中实际包含的是XML。根据MIME类型,即使数据是XML,responseXML属性中仍然是null。通过调用overrideMimeType( )方法,可以保证把响应当作XML而非纯文本来处理。
var xhr=createXHR( ); xhr.open("get","text.php",true); xhr.overrideMimeType("text/xml"); xhr.send(null);
调用overrideMimeType( )方法必须在send( )方法之前,才能保证重写响应的MIME类型。
六、进度事件
1.与客户端服务器通信有关的事件:
(1)loadstart:在接收到响应数据的第一个字节触发。
(2)progress:在接收响应期间持续不断地触发。
(3)error:在请求发生错误时触发。
(4)abort:在因为调用abort( )方法而终止连接时触发。
(5)load:在接收到完整的响应数据时触发。
(6)loadend:在通信完成或者触发error、abort或load事件后触发。
七、跨源资源共享
通过XHR实现Ajax通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对开发某些浏览器应用程序也是至关重要的。
CORS背后的思想:使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功,还是应该失败。
比如一个简单的使用GET或POST发送的请求,它没有自定义的头部,而主体内容是text/plain。在发送该请求时,需要给它附加一个额外的Origin头部,其中包含请求页面的信息,以便服务器根据这个头部信息来决定是否给予响应。下面是一个Origin头部的一个示例:
Origin:http://www.nczonline.net
如果服务器认为这个请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息。例如:
Access-Control-Allow-Origin:http://www.nczonline.net
如果没有这个头部或者有这个头部但是信息源不匹配,浏览器就会驳回请求。注意:请求和响应都不包含cookie信息。
八、其他跨域技术:
1.图像Ping:
例如:
var img = new Image( ); img.onload = img.onerror = function(){ alert("Done!"); };
img.src = "http://www.example.com/test?name = Nicholas";
这里创建了一个Image实例,然后将onload和onerror事件处理程序指定为同一个函数。缺点是只能发送GET请求,二是无法访问服务器的响应文本。因此,图像ping只能用于浏览器与服务器间的单向通信。
2.JSONP
JSONP看起来与JSON差不多,只不过被包含在函数调用中的JSON,就像下面这样:
callback({"name":"Nicholas"});
JSONP由两部分组成:回掉函数和数据。回掉函数是当响应到来时应该在页面中调用的函数。回掉函数的名字一般是在请求中指定的。而数据就是传入回掉函数中的JSON数据。
JS复习:二十一章的更多相关文章
- JS复习第五章
第五章 引用类型 一.Object类型 创建object实例的方式有两种. 第一种是使用new操作符后跟object构造函数,如下所示: ver person = new Object( ) ; pe ...
- JS复习:第十、十一章
第十章 NodeList是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点,但它并不是Array实例,将其转化为数组的方法: function converToArray(nodes ...
- <构建之法>第十一章、十二章有感
十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- “全栈2019”Java第三十一章:二维数组和多维数组详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾 ...
- D3.js的v5版本入门教程(第十一章)——交互式操作
D3.js的v5版本入门教程(第十一章) 与图形进行交互操作是很重要的!所谓的交互操作也就是为图形元素添加监听事件,比如说当你鼠标放在某个图形元素上面的时候,就会显示相应的文字,而当鼠标移开后,文字就 ...
- R in action读书笔记(15)第十一章 中级绘图 之二 折线图 相关图 马赛克图
第十一章 中级绘图 本节用到的函数有: plot legend corrgram mosaic 11.2折线图 如果将散点图上的点从左往右连接起来,那么就会得到一个折线图. 创建散点图和折线图: &g ...
随机推荐
- Spark-GraphxAPI学习笔记
图的集合视图 graph包含三个基本的类集合视图: val vertices: VertexRDD[VD] val edges: EdgeRDD[ED] val triplets: RDD[EdgeT ...
- Hadoop集群搭建步骤
实验性操作是在虚拟机里进行的,除了搭建hadoop本身的操作之外,遇到的其它问题总结如下: 1. 虚拟机挂载windows磁盘: 添加硬件,要保证该硬件此时没有被读写访问等,因为挂载后,该磁盘在宿主机 ...
- Logstash安装搭建(一)
Logstash是一个具有实时管道的开源数据收集引擎.可以动态地统一不同来源的数据,并将数据归到不同目的地.也是一个管理事件和日志工具.你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用. ...
- ios 状态码
9001 无网络 9002 url错误 9003 链接超时 9005 json解析错误 9503 503 error
- 我是如何给discuz模板做语法高亮的
本人一直做ASP.NET开发,近期接到任务要用Discuz开发一个社区,第一次接触PHP,PHP灵活的语法,天生的模块化,各种语法糖深深的震惊了我,我从内心深处感受到了PHP是最牛逼的语言!!! 好了 ...
- Pass和ClassPath变量配置
1.pass环境变量配置的是可执行性文件bin目录,是为了在任意盘符下都可以运行javac.exe和java.exe所配置的. 2.classpath环境变量记录的是java类运行文件所在的目录,一般 ...
- 第一百二十三节,JavaScript错误处理与调试
JavaScript错误处理与调试 学习要点: 1.浏览器错误报告 2.错误处理 3.错误事件 4.错误处理策略 5.调试技术 6.调试工具 JavaScript在错误处理调试上一直是它的软肋,如果脚 ...
- Jedis实现发布订阅功能
Redis为我们提供了publish/subscribe(发布/订阅)功能.我们可以对某个channel(频道)进行subscribe(订阅),当有人在这个channel上publish(发布)消息时 ...
- jetty启动https
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- if ...
- Python基础(十一)-面向对象
三种编程范式: 1.函数式编程:函数指数学意义上的函数 由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的.没有可变的状态,函数就是引用透明(Ref ...