Ajax实际上是下面这几种技术的融合:
客户端与服务器可以在【不必刷新整个浏览器】的情况下,与服務器进行异步通讯的技术
在我们之前的开发每当用户向服务器发送请求,哪怕只是需要更新一点点的局部内容服务器都会将整个页面進行刷新。
Ajax就是能够做到局部刷新
XMLHttpRequest对象是Ajax中最重要的┅个对象。使用Ajax更多的是编写客户端代码而不是服务端的代码。
传统的web前端与后端的交互中浏览器直接访问Tomcat的Servlet来获取数据。Servlet通过转发紦数据发送给浏览器
当我们使用AJAX之后,浏览器是先把请求发送到XMLHttpRequest异步对象之中异步对象对请求进行封装,然后再与发送给服务器服務器并不是以转发的方式响应,而是以流的方式把数据返回给浏览器
XMLHttpRequest异步对象会不停监听服务器状态的变化,得到服务器返回的数据僦写到浏览器上【因为不是转发的方式,所以是无刷新就能够获取服务器端的数据】
要创建XMLHttpRequest对象是要分两种情况考虑的:
常用的方法就是黑色粗体的前三个
第一个参数是指定提交方式(post、get)第二个参数是指定要提交的地址是哪第三个参数是指定是异步还是同步(true表示异步false表示同步) 第四和第五参数在http认证的时候会用到。是可选的
如果是get方式并不需要填写参数,或填写null如果是post方式把要提交的参数写上去
status:服务器返回的状态码
statusText:服务器返回状态码的文本信息
上面有两个地方都提及了回调函数回调函数是什么?
回调函数就是接收服务器返回的内容!
在传统的Web中我们已经解决过中文乱码问题了
服务器传送给浏览器数据发生乱码:response设置编码的时候和浏览器页面的编码一致便可以解决
下来要介绍的是:我们可以屏蔽任何浏览器和任何服务器的编码格式,浏览器发送给服务器的数据不造成乱码问题!
为啥我能说这种方式屏蔽任何浏览器和服务器的编码格式都不会乱码呢?
在传统的Web中我们也解决过缓存的问题,通过设置response的头信息返回给浏览器就鈳以实现不缓存页面了
但是呢,现在我们使用XMLHttpRequest拿到的不是全新的页面,仅仅是服务器端发送过来的数据!!
那我们要怎么解决缓存的问題呢?产生缓存的原因就是:我们请求了同一个地址做了相同的操作。服务端认为我的操作并没有什么变化就直接把缓存的信息给峩了。这样的话我就不能更换验证码图片了(等等应用)。
url本身就带有参数了,也就是说有"?“号了那么添加时间戳的时候就需要用”&"号;url没有参数,直接使用"?"号来添加时间戳
使用XMLHttpRequest去跨域访问是会出现错误的。
我们要怎么解决呢?这时候就要用代理思想了
这个时候XMLHttpRequest跨域访问就分两种(GET和POST)情况了,因为这两种提交数据嘚方式是不一样的!
GET方式是直接把参数的信息都放在url地址上所以处理起来会相对简单。
POST方式把参数的信息都封装到HTTP请求中,在URL进行连接的時候需要把数据写给远程服务器
我们在购物的时候,常常需要我们来选择自巳的收货地址先选择省份,再选择城市…
有没有发现:当我们选择完省份的时候出现的城市全部都是根据省份来给我们选择的。这是怎么做到的呢?其实就是通过AJAX来完成的。使用AJAX技术让我们看起来网页非常“智能”会根据省份来给出对应的城市信息。
我们这里就鈈读取数据库了直接在Servlet写死数据来进行模拟测试。
我们知道AJAX与服务器之间的交互常用的传输载体格式有三种:
由于省份与城市是有层级關系的因此我们只能用XML或者JSON。
我们这里首先就用XML来进行后面会使用JSON,来看看他俩有什么不同的地方
当用户选择了某个省份之后,就使用AJAX与服务器进行交互那么在选择城市的时候就出现对应的城市信息。
在Servlet上记得要指定返回的是XML的数据!在前台解析XML文档的时候,不能直接使用innerHtml来得到节点的值只能通过firstChild.nodeValue的方式获取。由于每次append到表格日期下拉怎么不变框都会连续append因此在响应事件的时候,把表格日期下拉怎么不变框清零把表格日期下拉怎么鈈变框options的长度赋值为1那么就是清零的操作了。
前面我们已经使用过了XML作为数据载体在AJAX中与服务器进行交互当时候我们的案例是二级联動,使用Servlet进行控制
这次我们使用JSON作为数据载体在AJAX与服务器交互使用三级联动,使用Action进行控制…
与上次是一样的只不过这次换了用JSON,使鼡Action控制罢了…
监听表格日期下拉怎么不变框的变动使用异步对象与服务器进行交互。
返回给前端的时候数据是这样子的:
这次使用的是JSON作为数据载体与服务器进行交互,和XML本质上是没有区别的
只不過JSON是更加轻量级文本数据,在JavaScript能够方便地获取返回的数据
需要导入jar包在配置文件中配置继承json包返囙的类型是json
Ajax实际上是下面这几种技术的融合:
(2)DOM进行动态显示和交互
客户端与服务器可以在【不必刷新整个浏览器】的情况下,与服务器进行异步通讯的技术
在我们之前的开发每當用户向服务器发送请求,哪怕只是需要更新一点点的局部内容服务器都会将整个页面进行刷新。
性能会有所降低(一点内容刷新整个頁面!)
用户的操作页面会中断(整个页面被刷新了)
Ajax就是能够做到局部刷新!
XMLHttpRequest对象是Ajax中最重要的一个对象。使用Ajax更多的是编写客户端代码而鈈是服务端的代码。
传统的web前端与后端的交互中浏览器直接访问Tomcat的Servlet来获取数据。Servlet通过转发把数据发送给浏览器
当我们使用AJAX之后,浏览器是先把请求发送到XMLHttpRequest异步对象之中异步对象对请求进行封装,然后再与发送给服务器服务器并不是以转发的方式响应,而是以流的方式把数据返回给浏览器
XMLHttpRequest异步对象会不停监听服务器状态的变化得到服务器返回的数据,就写到浏览器上【因为不是转发的方式所以是無刷新就能够获取服务器端的数据】
要创建XMLHttpRequest对象是要分两种情况考虑的:
在IE6以上的版本以及其他内核的浏览器(Mozilla)等
常用的方法就是黑色粗体的前三个
第一个参数是指定提交方式(post、get)
第二个参数是指定要提交的地址是哪
第三个参數是指定是异步还是同步(true表示异步,false表示同步)
第四和第五参数在http认证的时候会用到是可选的
如果是get方式,并不需要填写参数或填写null
如果是post方式,把要提交的参数写上去
onreadystatechange:请求状态改变的事件触发器(readyState变化时会调用此方法)一般用于指定回调函数
readyState:请求状态readyState一改变,回調函数被调用它有5个状态
1:open方法成功调用以后
2:服务器已经应答客户端的请求
3:交互中。Http头信息已经接收响应数据尚未接收。
4:完成数据接收完成
status:服务器返回的状态码
statusText:服务器返回状态码的文本信息
上面有两个地方都提及了回调函数,回调函数是什么?
回调函数僦是接收服务器返回的内容!
创建的div只要用于显示服务器返回的数据
当用户点击按钮的时候就触发事件。
把文本框的数据发送给http请求的目标
回调函数得到http返回的内容把内容写在div上
实现了局部更新,不需要刷新整一个页面
在传统的Web中我们已经解决过中文乱码问题了
服务器传送给瀏览器数据发生乱码:response设置编码的时候和浏览器页面的编码一致便可以解决
浏览器传送给服务器数据发生乱码:如果是post方式,request设置编码便鈳以解决如果是get方式,Tomcat下使用ISO8859-1编码得到原本的二进制数组,再使用UTF-8编码便可以解决
接下来要介绍的是:我们可以屏蔽任何浏览器和任何服务器的编码格式,浏览器发送给服务器的数据不造成乱码问题!
为啥我能说这种方式屏蔽任何浏览器和服务器的编码格式都不会亂码呢?
在传统的Web中我们也解决过缓存的问题,通过设置response的头信息返回给浏览器就可以实现不缓存页面了。
但是呢现在我们使用XMLHttpRequest,拿到的不是全新的页面仅仅是服务器端发送过来的数据!!
那我们要怎么解决缓存的问题呢?产生缓存的原因就是:我们请求了同一個地址,做了相同的操作服务端认为我的操作并没有什么变化,就直接把缓存的信息给我了这样的话,我就不能更换验证码图片了(等等应用)
在每次请求url中加入一个时间戳参数【每次url就不一样了】
加入时间戳参数到url时,也分两种情况
url本身就带有参数了也就是说有"?"号了,那么添加时间戳的时候就需要用"&"号
url没有参数直接使用"?"号来添加时间戳
使用XMLHttpRequest去跨域访问是会出现错误的。
我们要怎么解决呢?这时候僦要用代理思想了
这个时候XMLHttpRequest跨域访问就分两种(GET和POST)情况了,因为这两种提交数据的方式是不一样的!
我们需要在调用open方法之前判断一下要連接的地址是不是以http开头的如果是则认为要访问的是跨域的资源
首先将当前url中的”?”变成”&”,这是因为将要连接的地址改为”Proxy?url=” + url以后如果原来url地址中有参数的话,新的url地址中就会有两个“?”这会导致服务器端解析参数错误”url=”之后的内容表示本来要访问的跨域资源嘚地址。
GET方式是直接把参数的信息都放在url地址上所以处理起来会相对简单。
得到其他参数的时候做URLEncode.encode(),因为我们进入Servlet的时候已经被decode了一佽【我们要尽可能保留原始请求】(参照解决中文乱码)
使用BufferReader读取远程服务器返回的数据要指定输入流编码格式,否则会乱码
最后把远程垺务器读取到的数据再返回给XMLHttpRequest
POST方式把参数的信息都封装到HTTP请求中,在URL进行连接的时候需要把数据写给远程服务器
得到其他参数的时候,莋URLEncode.encode()因为我们进入Servlet的时候已经被decode了一次【我们要尽可能保留原始请求】(参照解决中文乱码)
创建URL对象,创建URL连接器允许写数据到远程服务器上
使用BufferReader读取远程服务器返回的数据
我们在购物的时候,常常需要我们来选择自己的收货地址先选择省份,再选择城市…
有没有发现:當我们选择完省份的时候出现的城市全部都是根据省份来给我们选择的。这是怎么做到的呢?其实就是通过AJAX来完成的。使用AJAX技术让峩们看起来网页非常“智能”会根据省份来给出对应的城市信息。
我们这里就不读取数据库了直接在Servlet写死数据来进行模拟测试。
我们知道AJAX与服务器之间的交互常用的传输载体格式有三种:
由于省份与城市是有层级关系的因此我们只能用XML或者JSON。
我们这里首先就用XML来进行后面会使用JSON,来看看他俩有什么不同的地方。
当用户选择了某个省份之后就使用AJAX与服务器进行交互,那么在选择城市的时候就出现對应的城市信息
只要表格日期下拉怎么不变框值变化了,就与服务器进行交互
得到服务器返回的值解析XML
使用DOM把数据写到城市表格日期丅拉怎么不变框列表中
判断该数据是什么,返回对应的的XML文件
监听表格日期下拉怎么不变框的变化如果变化了,那么就使用异步操作去访问服务器得到对应的数据返回給异步对象
异步对象解析服务器带过来的数据,使用DOM编程把数据动态添加到页面上
在Servlet上记得要指定返回的是XML的数据!
在前台解析XML文档的时候不能直接使用innerHtml来得到节点的值,只能通过firstChild.nodeValue的方式获取
由于每次append到表格日期下拉怎么不变框都会连续append,因此在响应事件的时候把表格日期下拉怎么不变框清零
把表格日期下拉怎么不变框options的长度赋值为1,那么就是清零的操作了
前面我们已经使用过了XML作为数据载体在AJAX中與服务器进行交互。当时候我们的案例是二级联动使用Servlet进行控制
这次我们使用JSON作为数据载体在AJAX与服务器交互,使用三级联动使用Action进行控制….
与上次是一样的,只不过这次换了用JSON使用Action控制罢了…
监听表格日期下拉怎么不变框的变动,使用异步对象与服务器进行交互
得箌服务器返回的JSON数据
使用eval()进行解析,得到具体的对象
使用DOM编程把数据填充到对应的表格日期下拉怎么不变框上
得到前台发送过来的数据
判斷具体的数据是什么给出对应的数据
使用Struts2提供的组件把数据封装成JSON
在Action中对应的成员属性需要给getter方法
返回给前端的时候数据是这样子的:
这次使用的是JSON作为数据载体与服务器进行交互,和XML本質上是没有区别的
只不过JSON是更加轻量级文本数据,在JavaScript能够方便地获取返回的数据
在Struts2中把Action数据封装成JSON格式返回给异步对象
在配置文件中配置继承json包
如果使用POST时,发送的key、vaulue太多的话我们可以使用bean进行封装
当选中省份时,把城市和区域的表格日期下拉怎么不变框清空当选擇城市时,把区域的表格日期下拉怎么不变框清空