JavaScript(10)——Ajax以及跨域处理
Ajax以及跨域处理
哈哈哈,终于写到最后一章了。不过也还没有结束,说,不要为了学习而学习,恩。我是为了好好学习而学习呀。哈哈哈。正在尝试爱上代码,虽然有一丢丢的难,不过,我相信我会的!
【Ajax】
Ajax技术的核心是XMLHttpRequest对象(简称HXR)。Ajax通信与数据格式无关,这种技术就是无须刷新页面即可从服务器取得数据,但不一定是XML数据。
【XMLHttpRequest对象】
IE5是第一款引入XHR对象的浏览器。XHR对象是通过MSXML库中的一个ActiveX对象实现的。在IE5中,可能会遇到MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0这三种版本的XHR对象。
XHR的用法
在使用XHR对象时,要调用的第一个方法是open(),他接收三个参数:要发送的请求类型("get"、"post"等)、请求的URL和表示是否异步发送请求的布尔值。
XHR对象的属性
responseText:作为响应主体被返回的文本。
responseXML:如果响应的内容类型是"text/xml"或"application/xml",这个属性中将保存包含着响应数据的XML DOM文档。
status:响应HTTP状态。
statusText:HTTP状态说明。
HTTP头部信息
http是计算机通过网络进行通信的规则。
http请求过程:
(1)建立TCP连接
(2)web浏览器向web服务器发送请求命令。
(3)web浏览器发送请求头信息。
(4)web服务器应答。
(5)web服务器发送应答头信息。
(6)web服务器向浏览器发送数据。
(7)web服务器关闭TCP连接。
http请求组成:
(1)http请求的组成和方法,比如get或者post请求;
(2)正在请求的URL;
(3)请求头,包含客户端环境信息,身份验证信息等;
(4)请求体,也就是请求正文。可以包含客户提交的查询字符串信息、表单信息等等。
get请求和post请求
get:一般用于信息获取,使用传递参数,对所发送信息的数量也有限制,一般在2000个字符。
get请求经常会发生一个错误,就是查询字符串的格式有问题。查询字符串中每个参数的名称和值都必须使用encodeURICompent()进行编码,然后才能放到URL末尾;而且 对所有名-值对儿都必须由和号(&)分隔。
post:通常用于向服务器发送应该被保存的数据,一般用于修改服务器上的的资源,对所发信息的数量无限制。
与get请求相比,post请求消耗的资源会更多一些。从性能角度来看,以发送相同的数据计,get请求的速度最多可达到post请求的两倍。
【XMLHttpRequest2级】
FromData
为序列化表单以及创建与表单以及创建与表单格式相同的数据(用于通过XHR传输)提供了便利。如下创建了一个FromData对象,并添加了一些数据:
var data=new FromData();
data.append("name","Nicholas");
这个append()方法接受两个参数:建和值,分别对应表单字段的名字和字段中包含的值。
使用FromData生物方便之处体现在不明确地在XHR对象上设置请求头部。XHR对象能够识别传入的数据类型是FromData实例,并配置适当的头部信息。
超时设定
IE8为XHR对象添加了一个属性timeout,表示请求在等待响应多少毫秒之后就终止。在给timeout设置一个值后,如果在规定的时间内浏览器还没有接受响应,那么就会触发timeout事件,进而调用ontimeouts事件处理程序。
overrideMimeType()方法:用于重写XHR响应的MIME类型。
【跨源资源共享】
默认情况下,XHR对象只能访问与包含它的页面位于同一域中的资源。CORS(跨源资源共享)定义了必须访问跨源资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想,就是自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或相应是应该成功还是失败。
IE对CORS的实现
微软在IE8中引入了XDR类型,这个对象与XHR类似,但能实现安全可靠的跨域通信。XDR对象安全机制部分实现了W3C和CORS规范。
所有XDR请求都是异步执行的,不能用它来创建同步请求。请求返回后,会触发load事件,响应的数据也会保存在responseText属性中。如下:
var xdr=new XDomainRequest();
xdr.onload=function(){
alert(xdr.responseText);
};
xdr.open("get","http://www.somewhere-else.com/page/");
xdr.send(null);
【其他跨域技术】
图像Ping
动态创建图像经常用于图像Ping。图像Ping是与服务器进行简单、单向的跨域通信的一种方式。
图像Ping最常用于跟踪用户点击页面或动态广告曝光次数。图像Ping主要有两个缺点,一是只能发送get请求,二是无法访问服务器的响应文本。
JSONP
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写。JSONP与JSON差不多,只不过是被包含在函数调用中的JSON。如下:
callback ({"name":"Nicholas"});
JSON由回调函数和数据两部分组成。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般在请求中指定的,而数据就是传入回调函数中的JSON数据。如下:
http://freegroip.net/json/?callback=handleResponse
【Comet】
Comet指的是一种更高级的Ajax技术(经常也有人称作“服务器推送”)。Ajax是一种从页面向服务器请求数据的技术,而Comet则是一种服务器向页面推送数据的技术。
实现Comet的方式有两种,长轮询和流。
长轮询是传统轮询(即短轮询)的一个翻版,即浏览器定时向服务器发送请求,看有没有更新数据。长轮询吧短轮询颠倒了一下。页面发起一个到服务器的请求,然后服务器一直保持连接打开,直到有数据可发送。发送完数据之后,浏览器关闭连接,随即又发起一个到服务器的新请求。
HTTP流,流不同于轮询,因为他在页面的整个生命周期内只使用HTTP连接。具体而言,就是浏览器向服务器发送一个请求,而服务器保持连接打开,然后周期性地向浏览器发送数据。所有服务器端语言都支持打印到输出缓存然后刷新(将输出缓存中的内容一次性全部发送到客户端)的功能,也正是实现HTTP流的关键所在。
JavaScript(10)——Ajax以及跨域处理的更多相关文章
- javascript ajax 脚本跨域调用全解析
javascript ajax 脚本跨域调用全解析 今天终于有点时间研究了一下javsscript ajax 脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂.由是转到jqu ...
- jquery中ajax处理跨域的三大方式
一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问.但ie10以下不支持 只需要在服务端填上响应头: ? 1 2 ...
- AJAX POST&跨域 解决方案 - CORS
一晃又到新年了,于是开始着手好好整理下自己的文档,顺便把一些自认为有意义的放在博客上,记录成点的点滴. 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是 ...
- 解决Ajax不能跨域的方法
1. Ajax不能跨域请求的原因 同源策略(Same Origin Policy),是一种约定,该约定阻止当前脚本获取或者操作另一个域下的内容.所有支持Javascript的浏览器都支持同源策略,也 ...
- AJAX POST&跨域 解决方案 - CORS(转载)
跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免 ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- Ajax之跨域访问与JSONP
前言 同源策略的限制,使得ajax无法发出跨域请求.在许多情况下,我们需要让ajax支持跨域.以下是其中一种解决方案(JSONP).JSONP解决了跨域数据访问的问题. 在html中,具有src属性的 ...
- Ajax之跨域请求
一.引子 我现在开启了两个django项目,分别叫Demo1和Demo2,Demo1中有一个路径‘http://127.0.0.1:8000/index/’,对应的视图是index视图返回一个inde ...
- jQuery ajax 302跨域
一.ajax 302 ajax用于异步获取服务器数据,但是某天有这么一个使用场景: > 基于安全考虑,登录的用户的信息失效时,系统的所有ajax接口都由服务器直接重定向到系统的登录页面,此时登录 ...
随机推荐
- GoogleCodeJam
2016年没有参赛,在师兄的介绍下,试了一下简单的一题,需要注意的是读写数据的形式还有具体代码. 2016资格赛 A题 Problem Bleatrix Trotter the sheep has d ...
- ASP.NET 企业组织机构代码验证
/// <summary> /// 组织机构代码验证 /// </summary> /// <param name="arg"></par ...
- 洛谷-谁拿了最多奖学金-NOIP2005提高组复赛
题目描述 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>8 ...
- css中position中的几个属性
static 是默认值.任意 position: static; 的元素不会被特殊的定位.一个 static 元素表示它不会被"positioned",一个 position 属 ...
- mysql索引类型-形式-使用时机-不足之处--注意事项
一.索引的类型 1.普通索引 增加 create index index_name on table(colume(length)); 例子:cre ...
- Petya and Spiders【二进制状压】
题目链接[http://codeforces.com/problemset/problem/111/C] 题意:给出大小为N*M的图(1 ≤ n, m ≤ 40, n·m ≤ 40),每个图中有一个蜘 ...
- cuda8.0环境下安装py-faster-rcnn问题总结
首先声明,由于之前安装的cuda8.0,在实践中出现各种问题,这里不是指安装环境问题,而是在训练模型是会阻止内核启动,因此让我不得不转战8.0,说出来都是泪啊,配个环境都配了一个礼拜了,所以,请不要轻 ...
- $(#form :input)与$(#form input)的区别
相信大家都很奇怪这两者的区别 我从两个方面简单介绍下 1. $("form :input") 返回form中的所有表单对象,包括textarea.select.button等 ...
- android设置组件透明度
textremind.setBackgroundColor(Color.argb(178, 0, 0, 0)); //背景透明度 textremind.setTextColor(Color.argb ...
- RTL-SDR简单介绍
Sdr 软件定义的无线电(Software Defined Radio,SDR) 是一种无线电广播通信技术,它基于软件定义的无线通信协议而非通过硬连线实现. Rtl-sdr 原身是Realtek RT ...