Ajax是什么?
Ajax并不算是一种新的技术,全称是asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新,早期的浏览器并不能原生支持ajax,可以使用隐藏帧(iframe)方式变相实现异步效果,后来的浏览器提供了对ajax的原生支持
使用ajax原生方式发送请求主要通过XMLHttpRequest(标准浏览器)、ActiveXObject(早期的IE浏览器)对象实现异步通信效果
那Ajax技术是由哪些组成的呢?
基于web标准(standards-basedpresentation)XHTML+CSS的表示;使用 DOM(Document ObjectModel)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript 将所有的东西绑定在一起。
为什么要用Ajax?它的优点是什么?
通过异步模式,提升了用户体验
优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离)
它的特点以及缺点?
特点
Ajax可以实现动态不刷新(局部刷新)就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
缺点
Ajax不支持浏览器的back按钮
安全问题 AJAX暴露了与服务器交互的细节。
对搜索引擎的支持比较弱。
破坏了程序的异常机制。
Ajax请求总共有多少种CallBack?
onSuccess
onFailure
onUninitialized
onLoading
onLoaded
onInteractive
onComplete
onException
Ajax工作原理?
Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
Ajax其核心只有JavaScript、XMLHttpRequest和DOM,在旧的交互方式中,由用户触发一个HTTP请求到服务器,服务器对其进行处理后再返回一个新的HTHL页到客户端, 每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次很小的交互、只需从服务器端得到很简单的一个数据,都要返回一个完整的HTML页,而用户每次都要浪费时间和带宽去重新读取整个页面。而使用Ajax后用户从感觉上几乎所有的操作都会很快响应没有页面重载(白屏)的等待。
细说XMLHttpRequest(你真的了解它吗?)
XMLHttpRequest一开始只是微软浏览器提供的一个接口,后来各大浏览器纷纷效仿也提供了这个接口,再后来W3C对它进行了标准化,提出了XMLHttpRequest标准,XMLHttpRequest标准分为Level 1和Level 2。
XMLHttpRequest Level 1主要存在以下几个缺点
受到同源策略的限制,不能够发送跨域请求
不能够发二进制文件(如图片、视频、音频等),只能发送纯文本数据
在发送和获取数据的过程中,无法实时获取进度信息,只能判断是否完成
什么是同源策略?怎么解决跨域请求的问题?
这里我加上我的理解简单的说一下什么是同源策略
同源策略是一种约定,是浏览器最核心也最基本的安全功能。保证用户信息的安全,防止恶意的网站窃取数据。
打个比方说吧!张三使用浏览器登录了网站A进行购物,然后又登录网站B,这时候如果网站B能够拿到网站A的Cookie的信息,就会泄露用户的相关隐私信息,也有可能被他人非法使用,甚至破坏等等!
同源策略需要同时满足以下三点要求
协议相同
域名相同
端口相同
http:www.test.com与https:www.test.com 不同源——协议不同
http:www.test.com与http:www.admin.com 不同源——域名不同
http:www.test.com与http:www.test.com:8081 不同源——端口不同
只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”。 最常见的形式是使用ajax请求数据。
那么如何解决跨域请求的问题呢?
JSONP方式
CORS方式
代理请求方式
Level 2对Level 1进行了改进,新增了一下功能
可以发送跨域请求,在服务端允许的情况下;
支持发送和接收二进制数据;
新增formData对象,支持发送表单数据;
发送和获取数据时,可以获取进度信息;
可以设置请求的超时时间。