Ajax
AJAX
AJAX并不是一门新技术,而是多种技术的结合体
一些有趣的事
AJAX 不是新的编程语言,而是一种使用已有标准的新概念
2005年由美国人Jesse James Garrett推广,并取名。
神奇的是,这哥们并不是搞程序的,而是搞设计的,是交互设计大师、用户体验大师。甚至是个优秀建筑设计师。在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。
在今天,很少有哪个网站不使用Ajax技术
Ajax技术对智能手机支持非常好。
Ajax中字母x表示XML,实际上XML已经过时,现在的公司,几乎全都在使用JSON代替XML。所以理论上讲,应该称呼为Ajaj,不过,呃,这个词儿,长得好难看。
AJAX 是一个什么东西
在不刷新页面的情况下,
浏览器悄悄地、异步地向服务器发出HTTP请求。
服务器收到请求后,传回新的格式化数据回来(通常是JSON)。
浏览器解析JSON,通过DOM将新数据呈递显示,页面仅局部刷新。
服务器与客户端
服务器和客户端说白了,都是电脑
服务器:能够提供某种服务的机器(计算机)
客户端:具有向服务器索取服务能力的终端
服务器类型:
a、按服务类型可分为:文件服务器、数据库服务器、邮件服务器、Web 服务器等;
b、按操作系统可分为:Linux服务器、Windows服务器等
c、按应用软件可分为 Apache服务器、Nginx 服务器、IIS服务器、Tomcat服务器、Node服务器等服务器软件
定义:使计算机具备提供某种服务能力的应用软件,称为服务器软件,通过安装相应的服务软件,然后进行配置后就可以使计算具备了提供某种服务的能力。常见的服务器软件:
a、文件服务器:Server-U、FileZilla、VsFTP等
b、数据库服务器:Oracle、MySQL、PostgreSQL、MSSQL
c、邮件服务器:Postfix、Sendmail
d、HTTP 服务器:Apache、Nginx、IIS、Tomcat、NodeJS
基础知识铺垫-网络相关概念
什么是IP地址,如何查看IP
所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址。
查看本机的IP: ipconfig 或者ipconfig -all
查看域名的IP: ping域名
由于IP地址是基于数字,不方便记忆,于是便用域名来代替IP地址,
说百了,域名就是方便IP的的别名,替代品DNS以及查找的规则
记录了 IP 地址和域名的映射(对应)关系。
查找优先级 本机hosts文件、DNS服务器端口
端口是计算机与外界通讯交流的出口,每个端口对应不同的服务。
说白了就是服务所对应的出口。一个域名可以对应多个IP
但是一个IP只能对应一个域名
通信协议
常见的通信协议
a、HTTP、HTTPS 超文本传输协议 —- 默认http是80端口,https是443端口
b、FTP 文件传输协议 —- 默认是 21 端口
c、SMTP 简单邮件传输协议 —- 默认是 25 端口HTTP协议
即超文本传输协议,网站是基于HTTP协议的。
HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。
即HTTP协议主要由请求和响应构成。HTTPS协议
以安全为目标的HTTP通道,简单讲是HTTP的安全版。
即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL即安全套接层,是为网络通信提供安全及数据完整性的一种安全协议。详细了解:百度百科(https://baike.baidu.com/)
C/S 和 B/S — 网络结构模式
C/S — 客户机和服务器模式 — 例如QQ、迅雷
B/S — 浏览器和服务器模式 — 例如OA、网页版QQ、网页版263邮箱但要注意:
B/S是基于特定通信协议(HTTP)的C/S架构,也就是说B/S包含在C/S中,是特殊的C/S架构。
B/S属于C/S,浏览器只是特殊的客户端,本质上开发浏览器,还是实现一个C/S系统。详细了解:百度百科(https://baike.baidu.com/)
原生Ajax实现页面局部更新
什么是Ajax
在不刷新页面的情况下,浏览器悄悄地、异步地向服务器发出HTTP请求。
服务器收到请求后,传回新的格式化数据回来(通常是JSON)。
浏览器解析JSON,通过DOM将新数据呈递显示,页面仅局部刷新
原生Ajax详解-xhr对象创建
- 标准下 — xhr = new XMLHttpRequest();
- IE6 — xhr = new ActiveXObject(‘Microsoft.XMLHTTP’);
原生Ajax详解-请求参数分析
open()方法,调用open方法并不会真正发送请求,而只是启动一个请求以备发送。
参数一: 请求方式(get获取数据,post提交数据);
参数二: 请求的地址
参数三: 同步或者异步标识位,默认是true标识true,false表示注意:如果是get请求,那么请求参数必须在url中传递 encodeURI()用来对中文参数进行编码,防止乱码。
send()方法
要发送特定的请求,需要调用send()方法。
它接受一个参数,即要作为请求主体发送的数据。
如果不需要通过请求主体发送数据,则必须传入null,不能留空。
如果要发送请求,用send()方法,get请求这里需要添加null参数
post请求参数通过send传递,不需要通过encodeURI()转码
但是必须需要设置请求头参数
xhr对象有一个重要的属性,就是readyState属性,表示“就绪状态”,就是xhr.readyState,readyState取值只有5种值:0、1、2、3、4.
- 0 (uninitialized) 未初始化 - 1 (loading) XMLHttpRequest对象正在加载 - 2 (loaded) XMLHttpRequest对象加载完毕 - 3 (interactive) 正在传输数据 - 4 (complete) 全部完成
只要readyState属性值发生了变化,就会触发一个事件onreadystatechange事件。
此时,可以用xhr.onreadystatechange = function(){}来捕获readyState改变之后做的事情。Ajax一旦用send方法发出HTTP请求之后,当readyState为4的时候,就会有一个属性产生 — xhr.status,表示的是请求的文件的状态码
- 1** —- 消息
- 2** —- 代码请求成功
- 3** —- 重定向
- 4** —- 请求错误
- 5** —- 服务器错误
- 6** —- 其它
原生Ajax详解-同源策略
什么是跨域
同源策略是浏览器的一种安全策略,所谓同源指的是请求URL地址中的协议、域名和端口号都相同,只要其中之一不相同就是跨域。
同源策略主要是为了保证浏览器的安全性
在同源策略下,浏览器不允许Ajax跨域获取服务器数据
说简单点:跨域是指从一个域名的网页去请求另一个域名的资源。只要协议、域名、端口有任何一个的不同,就被当作是跨域。
跨域解决方案
jsonp
document.domain + iframe
location.hash + iframe
window.name + iframe
window.postMessage
flash 等第三方插件
Ajax本身开始支持跨域(cross-origin- resource sharing)
99%的公司都在使用jsonp。
注:前端解决跨域问题的8种方案
http://www.cnblogs.com/JChen666/p/3399951.html原生Ajax详解-JSONP的原理
动态创建script标签,通过标签的src属性发送请求
动态创建script标签发出去的请求是异步请求
服务器响应的内容【函数调用】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27/*这是jquery中jsonp简单版模块*/
(function(window){
Leon.extend({
ajaxjsonp:function(defalults){
var bkName ='jQuery' + ('1.11.1' + Math.random()).replace(/\D/g,"") + '_' + (new Date().getTime());
if(defaults.jsonpcallback){
bkName = defaults.jsonpcallback ;
}
/*回调函数*/
window[bkName] = function (data){
defaults.success(data);
}
/*data拼接*/
var parm ='';
for(var j in defaults.data){
parm += '&' + j + "=" + defaults.data[j];
}
/*动态创建script*/
var script = document.createElement("script");
script.src = defaults.url + "?" +defaults.jsonp +'='+bkName + parm;
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
}
});
})(window);
原生Ajax详解-数据格式(xml)
什么是XML
1、XML指可扩展的标记语言
2、主要用来输出和存储数据 — 注意:设置宗旨是【传输数据】,而非显示数据
3、XML标签没有预定义,需要自行定义标签 — 就是说XML具有自我描述性
XML 数据格式的缺点
1、元数据占用的数据量比较大,不利于大量数据的网络传输
2、解析不太方便
XML和HTML的区别
1、XML是用来传输和存储数据的,而HTML被设计是用来显示数据的
2、XML旨在传输数据,HTML旨在显示信息
XML的树结构
1、XML 文档形成了的也是一种“树结构”,
2、【XML文档必须包含根元素】。该元素是所有其他元素的父元素。树结构从根部开始,扩展到最低端
XML的语法
1、所有XML元素都必须都闭合标签
2、XML标签对大小写敏感,因此必须使用相同的大小写来编写打开标签和关闭标签
3、XML必须正确地嵌套
4、XML 文档必须有根元素
5、XML 的属性值须加引号
6、XML 中的注释 — <!– … –>
7、在 XML 中,空格会被保留
8、一些特殊符号需要用实体引用
原生Ajax详解-数据格式 (json)
什么是JSON
- JavaScript 对象表示法
- 是存储和交换文本信息的语法
- 轻量级的文本数据交换格式
JSON数据和普通的JS兑现的区别
- json 对象没有变量
- json 形式的数据结尾没有分号
- json 数据中的键必须用双引号包括
JSON和XML对比
- JSON 比 XML 更小、更快,更易解析
把JSON文本转换为JavaScript对象
- JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
为什么要转换
- 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。
转换的方法
- JSON_parse() — 把json形式的字符串转成对象
- JSON_stringify() — 把对象转成字符串
- eval() — 把字符串解析成JS代码并执行