【Ajax】
Ajax技术能够向服务器请求额外的数据而无须卸载页面能带来更好的用户体验.
Ajax技术的核心是XMLHttpRequest对象(简称XHR),XHR向服务器发送请求和解析拂去其响应提供了流畅的接口。能够以异步方式从服务器取得更多信息,意味着用户单击后,可以不刷新页面也能取得新数据。也就是说,可以使用XHR对象取得新数据,然后再通过DOM将新数据插入到页面中。(这种技术就是无需刷新页面即可从服务器取得数据,被称为浏览器与服务器的通信)

在Ajax技术之前,网络世界是同步进行的,造成了很多不方便,有了Ajax技术后,网络变成了异步的世界。Ajax通过XMLHttpRequest对象完成异步。

XMLHttpRequest对象:
1、XMLHttpRequest对象创建(创建完XMLHttpRequest对象,就可以对服务器进行请求了)

//使用XMLHttpRequest构造函数
var request = new XMLHttpRequest();//在大多数浏览器中,在ie5、6中不支持这个方式 //在ie5、6中兼容,只需要定义下面这个函数
var request;
if(window.XMLHttpRequest){
request = new XMLHttpRequest();
}else{
request = new ActiveXObject("MicrosOft.XMLHTTP");
}

2、http请求:
http:是一套计算机通过网络进行通信的规则,http主要用于客服端(浏览器)向服务器请求信息和服务。http是一种无状态协议:不建立持久的连接,即服务端不保留连接的相关信息;无记忆,即每次请求都会打开一个tcp连接,当请求完毕就关闭tcp连接。第二次又重新建立tcp连接。
一个完整的http请求过程的7个步骤:
    ——建立TCP连接;
    ——web浏览器向web服务器发送请求命令;
    ——web浏览器发送请求头信息;
    ——web服务器应答;
    ——web服务器发送应答头信息;
    ——web服务器向浏览器发送数据;
    ——web服务器关闭TCP连接。
一个http请求一般包含四个部分:
    http请求的方法或动作,例如get和post请求;
    正在请求的URL;
    请求头,包含一次客户端信息和身份验证信息等;
    请求体,就是请求正文,请求体包含一些客服请求的查询字符串信息和表单信息等

GET请求和POST请求
GET请求:一般用于信息获取,使用URL传递参数,最常用于向服务器查询某些信息。
POST请求:一般用于修改服务器上的资源,通常用于向服务器发送应该被保存的数据,格式不限。
一个http响应一般由三部分组成:
    一个数字和文字组成的状态码,用于实现请求是成功还是失败;
    响应头;
    响应体,响应的正文。
3、XMLHttpRequest发送请求的方法:
open(method,url,async)
参数说明:method指的是要发送的请求的类型(get和post),请求的url和请求是否异步进行的布尔值。
send(string)
该方法接收一个参数,既要作为请求主体发送的数据,如果不需要请求主体发送数据,则传入null。
在这里我们有时候会用到一个setRequestHeader()方法来设置自定义的请求头部信息,这个方法接受两个参数:头部字段的名称和头部字段的值。这个方法必须在open(方法之后在send()方法之前调用。

request.open("get", "url",false); request.send(null);

request.open("post", "url",true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send("name=王二狗&sex=男");

4、XMLHttpRequest取得响应
XMLHttpRequest取得响应值得方法:
responseText:获得字符串形式的响应数据;
responseXML:获得XML形式的响应值;
status和statusText:以数字或文本形式返回http状态码;
getAllResponseHeader():获的所以的响应报头;
getResponseHeader():查询报头中某个字段的值。

要想获得响应过程的当前活动阶段或监听响应状态,就可以通过readyState属性的变化来检查,值可取为:
0:请求未初始化,open()还未调用;
1:服务器已经连接,open()已经被调用,启动;
2:请求已经接收,就是已经接收到头部信息了,send()方法已经调用,但还没有接收到响应;
3:接收,请求处理中,也就是已经接收到部分响应数据了(响应主体);
4:完成,请求和响应都已经完成。
通过监听一个readyState属性的一个事件来完成:

var request = new XMLHttpRequest();
request.open("GET", "url",true);
request.send();
request.onreadystatechange = function(){
if(request.readyState === 4 && request.readyState === 200){
//做一些事情 request.responseText
}
}

XMLHttpRequest2级
是对XHR的发展,他有一些所有浏览器都实现的内容:
1、FormDate:为序列化表单以及创建与表单格式相同的数据提供了便利。下面创建一个FormDate对象:

//创建FormDate对象
var data = new FormDate();
data.append("name","bob");//append()方法接收两个参数:键和值

2、超时设定:IE8为XHR对象添加了一个属性timeout,表示请求在等待响应多少毫秒之后就终止。在给timeout设置一个值后,如果在规定的时间内浏览器还没有接受响应,那么就会触发timeout事件,进而调用ontimeouts事件处理程序。
3、overrideMimeType()方法:用于重写xhr响应的MIME类型。调用overrideMimeType()方法,可以保证把响应当作XML而非纯文本来处理。调用overrideMimeType()必须在send()方法之前,才能保重写成功。

【跨域】
一个域名地址的组成:

当协议、子域名、主域名、端口号中的任意一项不同时,都算作不同域,不同域之间相互请求资源据算作“跨域”。

【跨域资源共享CORS】
javascript出于对安全的考虑,不允许跨域调用其他页面的对象。但是,合理的跨域也是很重要的。
CORS:跨域资源共享,定义了在必须访问跨域资源时,浏览器与服务器应该如何沟通。CORS的基本思想就是使用自定义的http头部让浏览器与服务器进行沟通,从而解决请求是应该成功还是失败。

与其他浏览器不同的是IE是通过XDR(XDomainRequest)对象实现CORS的,XDR对象的使用方法与XHR对象很相似,但XDR对象的open()方法只接收两个参数:请求的类型和统一资源定位器(url)。所有的XDR都是异步执行的,响应的数据会保存在responseText属性中。如:

var xdr = new XDomainRequest();
         xdr.onload = function(){
            alert(xdr.responseText);
         };
         xdr.open("get", "url");
         xdr.send(null);

处理跨域的方法:代理:通过同域名的服务器端创建一个代理。
处理跨域的技术:
1、JSONP
JSONP:是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方式,JSONP看起来与JSON差不多,只不过是被包含在函数调用中的JSON,例如:

callack({"name":"bob"});

JSONP有两个部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,数据就是传入回调函数中的JSON数据。下面是一个典型的JSONP请求:

http://freegeoip.net/json/?callback=handleResponse

2、图像Ping
他的方式是动态创建图像,图像Ping是与服务器进行简单、单向的跨域通信的一种方式。图像Ping最常用于跟踪用户点击页面或动态广告曝光次数。

【小结】

Ajax是无需刷新页面就可以从服务器取得数据的一种方法,负责Ajax运作的核心对象是XMLHttpResquest(XHR)对象。

同源策略是对XHR的一个主要约束,他为通信设置了“相同的域,相同的端口,相同的协议”这一限制。试图访问上述限制之外的资源,都会引发错误,除非采用被认可的跨域解决方案:CORS(Cross -Origin Resource Sharing,跨域资源共享),ie8通过XDomainRequest对象支持CORS,其他浏览器通过XMLHttpRequest对象支持。图像Ping和JSONP是另外两种跨域通信的技术,但是没有CORS稳妥。

另外还有一个Comet,上面没有对他进行详细说明,Comet是对Ajax的进一步扩展,让服务器几乎实时的向客服端推送信息,实现Comet的手段主要有两种:长轮询和http流。

Ajax接触及对跨域的简单理解的更多相关文章

  1. Jquery AJAX ASP.NET IIS 跨域 超简单解决办法

    第一种: 在IIS添加如下标头即可 Access-Control-Allow-Headers:Content-Type, api_key, AuthorizationAccess-Control-Al ...

  2. nginx跨域的简单应用

    nginx跨域的简单应用 要求:1.浏览器访问print.qianbaihe.wang/zt 直接调转至 www.flybirdprint.com/zt,浏览器显示域名不变. server { lis ...

  3. Springboot如何优雅的解决ajax+自定义headers的跨域请求

    1.什么是跨域 由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.),凡是发 ...

  4. Springboot如何优雅的解决ajax+自定义headers的跨域请求[转]

    1.什么是跨域 由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.),凡是发 ...

  5. Vue.js——基于$.ajax实现数据的跨域增删查改

    概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...

  6. Vue.js——基于$.ajax实现数据的跨域增删查改

    转自:https://www.cnblogs.com/keepfool/p/5648674.html 概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是loc ...

  7. Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)

    由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...

  8. 使用HTML5中postMessage实现Ajax中的POST跨域问题

    HTML5中提供了在网页文档之间相互接收与发送信息的功能.使用这个功能,只要获取到网页所在窗口对象的实例,不仅仅同源(域+端口号)的web网页之间可以互相通信,甚至可以实现跨域通信. 浏览器支持程度: ...

  9. ajax 设置Access-Control-Allow-Origin实现跨域访问

    ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全. 即使使用jquery的jsonp方法,t ...

随机推荐

  1. ArcGIS for window mobile 数据打开

    前言 环境信息:ArcGIS for windows mobile 10.1.1,ArcGIS runtime sdk for windows mobile 10.1.1 一.MapCache的打开 ...

  2. SpringBoot连接PostgreSQL

    这个 org.postgresql.jdbc.PgConnection.createClob() 方法尚未被实作 application.properties spring.datasource.pl ...

  3. mapper文件提示:No data sources are configured to run this sql

    mapper文件发出黄色警告. 输入数据库用户名和密码等等. 自动同步ok 就会发现代码变绿了,ok

  4. 使用Kotlin开发Android应用(IV):自定义视图和Android扩展

    在读完扩展函数和默认值这篇文章之后,那么接下来要介绍什么呢?在本系列第一篇文章中我们说过,Kotlin使得Android开发更加简单,本文我们将进一步作介绍. 自定义视图 你应该还记得,在说到Kotl ...

  5. 使用 C#的 is 和 as 操作符来转型

    在 C#语言中进行类型转换的另一种方式是使用 is 操作符. is 检查一个对象是否兼容于指定的类型,并返回一个 Boolean 值: true 或 false.注意 is 操作符永远不会抛出异常,以 ...

  6. MFC实现文字随鼠标移动

    1 实验介绍 此实验是在刚开始接触MFC时做的.它要求实现的功能如下: 文字跟随鼠标动态移动(跟随移动方式自定) 修改图标为自己喜欢的图标 修改窗口标题 修改文档名称 可以用菜单项选定指定的颜色显示文 ...

  7. 【整理学习Hadoop】H D F S 一个分布式文件系统

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别 ...

  8. iOS 事件响应者链的学习(也有叫 UI连锁链)

    当发生事件响应的时候,必须知道由谁来响应事件.在iOS中,由响应链来对事件进行响应,所有的事件响应的类都是继承于UIResponder的子类,响应链是一个由不同对象组成的层次结构,其中每个对象将依次获 ...

  9. ORACLE对象模式

    在oracle数据库中,数据对象是以模式(Schema)为单位进行组织和管理的.所谓模式是指一系列逻辑数据结构或对象的集合. 模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式名称与这个用 ...

  10. $git学习总结系列(1)——基本用法

    廖雪峰的官方网站:http://www.liaoxuefeng.com/ 本文是学习廖雪峰的官方网站上git教程git基本用法的总结,详细内容可以进入廖雪峰的官方网站查看. 注:本文中的主要内容都是基 ...