Ajax

Ajax

什么是Ajax

*允许浏览器与服务器通信而无须刷新当前页面的技术Ajax技术(异步)

同步交互和异步交互的区别?

1)同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方  式。

2)异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯  方式。

例子:普通B/S模式(同步)       AJAX技术(异步)

 *  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干   任何事

 *  异步请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理   完毕。
 Ajax模型比传统的web模型好在哪里?

1)页面数量少,性能高

2)对带宽的要求低

3)对服务器端造成的压力小

除了Ajax技术之外,还有哪些技术可以进行异步交互?

1)Flash技术(问题:性能不好;不是浏览器原生)

2)框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动  整个页面

3)iframeAjax技术出现之前,存在异步交互,实现异步交互的技术就是iframe问题:   实现异步交互之后,处理完毕后,加载的效果依旧还在。

4)XMLHttpRequest:该对象是对 JavaScript 的一个扩展,可使网页与服务器进行通信。    是创建 Ajax 应用的最佳选择。实际上通常把 Ajax 当成    XMLHttpRequest 对象的代名词 

Ajax的缺陷:

1)Ajax技术并不适用于任何场景

2)大量使用javascript引擎和Ajax引擎,取决于浏览器的支持

3)客户端与服务器端交互时,不刷新当前页面。使浏览器的前进和后退功能失效,用    户经常搞不清楚,数据是新的还是旧的。需单独地拿出一个地方,专门进行提示。

4)对流媒体的支持不太好

 

扩: AJAX包含的技术:面试题

* Ajax是不是一个技术?不是

包含哪些技术:JavascriptXHTMLCSSDOMXMLXMLHttpRequest

 

Ajax的工作原理

Ajax的核心是JavaScript对象XmlHttpRequest

该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之, XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

 

 

 

1)AJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除

   网络交互过程中的处理—等待—处理—等待缺点。

 

2)用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎用JavaScript语言编写,

   通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。

 

3)AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器

   间的交流。现在,可以用Javascript调用AJAX引擎来代替产生一个HTTP的用户动作

   内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交

   AJAX来执行。 

 

 

 

详细代码:

*创建XMLHttpRequest对象:有些笔试题,要求写出创建的代码!

function ajaxFunction(){

var xmlHttp;

try{ // Firefox, Opera 8.0+, Safari

     xmlHttp=new XMLHttpRequest();

   }catch (e){

  try{// Internet Explorer

   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

   }

  catch (e){

   try{

      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

   }catch (e){}

  }

}

return xmlHttp;

}

 

注册监听

     * 使用XMLHttpRequest对象的onreadystatechange属性:监听服务器端的通信状态

 * 使用XMLHttpRequest对象的readyState属性:获取服务器端的通信状态

代表未初始化。 还没有调用 open 方法

代表正在加载。 open 方法已被调用,但 send 方法还没有被调用

代表已加载完毕。send 已被调用。请求已经开始

代表交互中。服务器正在发送响应

代表完成。响应发送完毕

最终关注的状态为"4",响应完毕

使用XMLHttpRequest对象的status属性:获取响应首部信息中的三位状态码:

404 没找到页面(not found)

403 禁止访问(forbidden)

500 内部服务器出错(internal service error)

200 一切正常(ok)

304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被              修改 )

 

客户端与服务器端之间建立连接:

    * 使用的是XMLHttpRequest对象的open(method, url, asynch)方法

    * 请求类型是GET方式

* method:请求类型,为"get"

* url:请求路径,可以是绝对路径或相对路径

* asynch:表示是否异步加载,true是默认值(异步)

请求类型是POST方式

* method:请求类型,为"post"

* url:请求路径,可以是绝对路径或相对路径

* asynch:表示是否异步加载,true是默认值(异步)

需要设置请求首部信息:

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

 

向服务器端发送请求数据:

使用XMLHttpRequest对象的send()方法:

如果请求类型是GET方式的话,send()方法发送请求数据,服务器端不能接收

可以将要发送的请求数据,放置在请求连接的后面

该步骤不能省略,写法:send(null)

如果请求类型是POST方式的话,send()方法发送请求数据,服务器端可以接收

必须要设置请求首部信息的内容:Content-Type

 

实现Ajax的六个步骤是什么?

创建XMLHttpRequest对象

建立连接

发送请求

注册监听

获取服务器端的通信状态

获取服务器端的响应状态码

 

使用Ajax异步交互时,客户端接收服务器端的响应数据

使用XMLHttpRequest对象的responseText属性:

 

 

接收的格式是文本内容或HTMlL代码

* 客户端接收服务器端的响应时,数据格式:XML

    * 服务器端:

    * 设置响应首部信息:"Content-Type""text/xml"

response.setContentType("text/xml;charset=utf-8");

手动构建的xml格式数据:真实开发不可能这样做

构建的数据格式是xml格式,是String类型

数据来源于查询数据库,封装在javabeanListMapArray集合等

 

* 如何将javabeanListMapArray集合内容转换成xml数据格式?

* xstream工具包:

* xstream-1.4.4.jar包:核心包

* xpp3_min-1.1.4c.jar包:必要依赖包

 

处理逻辑:

//1 创建一个XStream的实例

XStream xStream = new XStream();

/*

 * 2 javabean起别名(默认是包结构)

 *  * 利用XStream的实例alias(String name,Class type)

 *  * name:别名

 *  * type:指定为哪个javabean其别名

 */

xStream.alias("province", Province.class);

xStream.alias("city", City.class);

/*

 * 3 javabean的属性作为转换后的xml格式的标签属性使用

 *  * 利用XStream的实例useAttributeFor(Class type,String fieldName)

 *  * type:指定要使用哪个javabean的属性

 *  * fieldName:指定对应javabean的属性名

 */

xStream.useAttributeFor(Province.class, "provinceId");

xStream.useAttributeFor(Province.class, "provinceName");

xStream.useAttributeFor(City.class, "cityId");

xStream.useAttributeFor(City.class, "cityName");

//4   利用XStreamtoXML()方法,将javabean转换成xml数据格式

String xml = xStream.toXML(province1);

System.out.println(xml);

客户端:

使用XMLHttpRequest对象的responseXML属性:接收的格式是XML格式

利用DOM解析XML格式数据

 

* 第三种数据格式:json

定义:

1)是JavaScript Object Notation的缩写

2)是一种轻量级的数据交换格式。

特点:

1)易于人的阅读和编写

2)易于机器解析和生成

3)基于ECMA-262标准,采用完全独立于语言的文本格式。

数据格式和特点:

1“名称/值”对的集合:类似于Map集合

这种结构其实就是javascript对象的直接量定义方式

是以"{}"开始和结束

数据是以"key/value"形式

多个数据之间,用","隔开

访问形式:json.keyjson['key']

2)值的有序列表:类似于数组

* javascript中具有Array类型,内建对象

是以"[]"开始和结束的

数据之间用","隔开

 

3)json数据格式:是浏览器原生支持

*元素值可具有的类型:string, number, object, array, true, false, null

 

扩展:

* Map集合中嵌套数组结构

数组结构中嵌套Map集合

* "key/value"格式和数组格式可以混合嵌套,而且无限嵌套下去

 

 *客户端接收服务器端的响应时,数据格式:json

     * 服务器端:

不需要设置响应首部信息

构建的是String类型的json数据格式内容

如何将javabeanListArrayMap集合等转换成json数据格式?

* json-lib工具包:

* json-lib-2.4-jdk15.jar:核心包

必要依赖包:

* commons-beanutils-1.8.3.jar

* commons-collections-3.2.1.jar

* commons-lang3-3.1-bin.zip

* commons-lang-2.5.jar

* commons-logging-1.1.1.jar

* ezmorph-1.0.6.jar

* morph-1.1.1.jar

* morph-sandbox-1.1.1.jar

使用我们自己的工具类:JSONUtil

客户端:

接收服务器端响应的json数据格式:

使用XMLHttpRequest对象的responseText属性

将其当做文本格式接收

 

利用eval()函数将其转换成json数据格式:

调用eval()函数时,将要转换成的内容,用"()"进行包装:(假如传递的是"{}")

                * 利用"()"将其包装,eval()函数会强行将其转化成json数据格式(object)

        * 不用"()"将其包装,eval()函数会将其解释为一个空的语句块

 

小结:

 数据格式(HTML\XML\JSON)

1)HTML

              * 优点:

在客户端接收后,不需任何解析

可读性比较好

配合innerHTML属性使用,效率好

              * 缺点:

更新一个页面多个部分时,使用Ajax异步交互,HTML不合适

2)XML

  * 优点:

* XML 是一种通用的数据格式。

* XML格式是自定义标签名

* DOM可以解析XML,不需要第三方的工具

  * 缺点:

* DOM解析复杂的XML时,代码量比较大,性能低

服务器端,必须设置正确的响应首部信息:"Content-Type"   "text/xml"

如果服务器端构建的xml数据格式不正确,客户端接收是不报错   的!

3)JSON

  * 优点:

* json更专注数据内容

服务器端构建json数据格式时,使用默认设置即可

客户端解析json数据格式,DOM解析json数据格式

  * 缺点:

* eval()函数:有可能转换不成功

 

扩展内容:反向Ajax

定时发送原理图:

 

 

按需发送原理图:

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章