Ajax 学习总结

  Ajax 技术在 JavaWeb 应用中随处可见,比如购物车中根据商品数量及时更新等应用,那么我们今天就来说说 Ajax 的一些小应用!

  Ajax 技术也就是允许浏览器与服务器通信而无需刷新当前页面,数据在客户端和服务端独立传输,而不是以前客户端向服务端发送一个请求,服务器返回整个页面,如此反复。完成 Ajax 请求就需要使用 XMLHttpRequest 类的方法,下面我们先开始介绍 XMLHttpReqest 的 API

一、XMLHttpRequest API

  1.1 XMLHttpRequest 方法

    1. open("method", "url") -- -- 建立对服务器的调用,Method 参数可以是 get,也可以是 post,url 可以是相对的也可以是绝对的(准备发送请求)

        2. send("content")  -- -- 向服务器发送请求(发送的内容)

        3. setRequestHeader(“header”, "value") -- -- 把指定的首部设置为所提供的值,在设置任何首部之前必须先调用 open() 方法

  1.2 XMLHttpRequest 属性

    1. OnReadystateChange  -- -- 每个状态改变都会触发这个时间处理器,通常是 JS 函数(改事件由服务器触发)

      1.2.1 Ajax 执行过程中,服务器会通知客户端当前的通信状态,依靠 readyState 属性实现,改变 readryState 属性是服务器对客户端连接操作的一种方式,每次 readyState 属性改变都会触发 onReadyStateChange  事件

    2. readyState -- -- 请求的状态,有 5 个可取值 0(未初始化), 1(正在加载), 2(已经加载), 3(交互中), 4(已经完成)

    3. responseText -- -- 服务器的响应,表示为一个串

    4. responseXML -- -- 服务器的响应,表示为XML 可以解析为 DOM 对象

    5. status -- -- 服务器的 Http 状态码(200 对应 ok,404 对应 notFound)

 二、Ajax 小案例(使用 JS 实现)

  使用 Ajax 实现如下案例,分别用三种数据传输格式(Html、XML、JSON)

  2.1  案例演示

  

  2.2 Html 传输格式

    由于返回的数据格式为 html 所以利用函数 innerHtml 插入标签内即可。

    htmlTest.jsp 代码如下

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/12/04
 5   Time: 23:23
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>HtmlPage</title>
12     <script type="text/javascript">
13         window.onload = function () {
14 //            获取 a 标签
15             var aTags = document.getElementsByTagName("a");
16 //            为每一个 a 标签添加点击事件
17             for (var i = 0; i < aTags.length; i++) {
18                 aTags[i].onclick = function () {
19 //                    新建 XMLHttpRequest 对象
20                     var request = new XMLHttpRequest();
21 //                    定义传输方法为 GET
22                     var method = "GET";
23 //                    定义 URL
24                     var url = this.href + "?time=" + new Date();
25 //                    发送请求
26                     request.open(method, url);
27 //                    不需要传输数据,设置传输内容为 null
28                     request.send(null);
29 //                    处理响应
30                     request.onreadystatechange = function () {
31 //                        如果响应已经完成
32                         if (request.readyState == 4) {
33 //                            如果服务器状态码正确
34                             if (request.status == 200 || request.status == 304) {
35 //                                那么就将响应字段加入预先定义好的 Html 中
36                                 document.getElementById("htmlTest").innerHTML = request.responseText;
37                             }
38                         }
39                     }
40 //                    超链接点击事件返回 false,取消其默认事件的触发
41                     return false;
42                 }
43             }
44         }
45     </script>
46 </head>
47 <body>
48 <ul>
49     <li><a href="yy.html">YY Page</a></li><br>
50     <li><a href="SSPage.html">SS Page</a></li><br>
51     <li><a href="YYSSPage.html">YS Page</a></li><br>
52 </ul>
53 <div id="htmlTest"></div>
54 </body>
55 </html>

    各超链接所对应的页面(SSPage.jsp、yy.html、YYSSPage.html)

1 <h3>SS</h3>
2 <b>ssPage please go to</b>
1 <h3>YY</h3>
2 <b>yyPage please go to</b>
1 <h3>YS</h3>
2 <b>ysPage please go to</b>

  2.3 XML 传输格式

    传输格式为 XML 需要在 jsp 页面中解析为 XML 获取标签内容然后加入页面

    xmlTest.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/12/05
 5   Time: 8:41
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>XMLPage</title>
12     <script type="text/javascript">
13         window.onload = function () {
14             var aTag = document.getElementsByTagName("a");
15             for (var i = 0; i < aTag.length; i++) {
16                 aTag[i].onclick = function () {
17                     var url = this.href + "?time=" + new Date();
18                     var method = "GET";
19                     var request = new XMLHttpRequest();
20
21                     request.open(method, url);
22                     request.send(null);
23                     request.onreadystatechange = function () {
24                         if (request.readyState == 4) {
25                             if (request.status == 200 || request.readyState == 304) {
26 //                                获得返回数据的 XML 格式
27                                 var result = request.responseXML;
28 //                                获得返回内容的 name 标签
29                                 var name = result.getElementsByTagName("name")[0].firstChild.nodeValue;
30 //                                获得返回内容的 website 标签
31                                 var website = result.getElementsByTagName("website")[0].firstChild.nodeValue;
32 //                                创建 h3 标签
33                                 var hNode = document.createElement("h3");
34 //                                将 website 内容加入到 h3 标签内
35                                 hNode.appendChild(document.createTextNode(name));
36
37                                 var bNode = document.createElement("b");
38                                 bNode.appendChild(document.createTextNode(website));
39
40                                 var divNode = document.getElementById("details");
41 //                                每次点击的时候首先将其内容清空,在加入对应的标签
42                                 divNode.innerHTML = "";
43                                 divNode.appendChild(hNode);
44                                 divNode.appendChild(bNode)
45                             }
46                         }
47                     }
48                     return false;
49                 }
50             }
51         }
52     </script>
53 </head>
54 <body>
55   <ul>
56       <li><a href="yy.xml">YYPage</a></li><br><br>
57       <li><a href="ss.xml">SSPage</a></li><br><br>
58       <li><a href="ys.xml">YSPage</a></li><br><br>
59   </ul>
60   <div id="details"></div>
61 </body>
62 </html>

    各超链接所对应的 xml 文件(ss.xml、yy.xml、ys.xml)

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <details>
3 <name>ss</name>
4 <website>ss.com</website>
5 </details>
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <details>
3     <name>yy</name>
4     <website>yy.com</website>
5 </details>
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <details>
3     <name>ys</name>
4     <website>ys.com</website>
5 </details>

  2.4 JSON 传输格式

    传输数据格式为 JSON 首先在页面需要将其转换为 JSON 格式

    jsonTest.jsp

 1     <%--
 2       Created by IntelliJ IDEA.
 3       User: yin‘zhao
 4       Date: 2017/12/04
 5       Time: 23:23
 6       To change this template use File | Settings | File Templates.
 7     --%>
 8     <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9     <html>
10     <head>
11         <title>JSONPage</title>
12         <script type="text/javascript">
13             window.onload = function () {
14                 var aTags = document.getElementsByTagName("a");
15
16                 for (var i = 0; i < aTags.length; i++) {
17                     aTags[i].onclick = function () {
18                         var request = new XMLHttpRequest();
19                         var method = "GET";
20                         var url = this.href + "?time=" + new Date();
21                         request.open(method, url);
22                         request.send(null);
23
24                         request.onreadystatechange = function () {
25                             if (request.readyState == 4) {
26                                 if (request.status == 200 || request.status == 304) {
27                                     var result = request.responseText;
28     //                                转换为 JSON 格式,将字符串
29                                     var jsonCon = eval("(" + result + ")");
30     //                                获取 name 和 website 节点值
31                                     var name = jsonCon.person.name;
32                                     var website = jsonCon.person.website;
33     //                                创建新的 html 节点
34                                     var hNode = document.createElement("h3");
35                                     hNode.appendChild(document.createTextNode(name));
36                                     var bNode = document.createElement("b");
37     //                                给新建的节点添加子节点,并为新的子节点添加内容
38                                     bNode.appendChild(document.createTextNode(website));
39
40                                     var divNode = document.getElementById("jsonTest");
41     //                                清空 div 节点中的内容
42                                     divNode.innerHTML = "";
43     //                                添加子节点
44                                     divNode.appendChild(hNode);
45                                     divNode.appendChild(bNode);
46                                 }
47                             }
48                         }
49                         return false;
50                     }
51                 }
52             }
53         </script>
54     </head>
55     <body>
56     <ul>
57         <li><a href="yy.json">YY Page</a></li><br>
58         <li><a href="ss.json">SS Page</a></li><br>
59         <li><a href="ys.json">YS Page</a></li><br>
60     </ul>
61     <div id="jsonTest"></div>
62     </body>
63     </html>

    各超链接所对应的 json 文件

1 {
2   "person":{
3     "name":"ss",
4     "website":"ss.com"
5   }
6 } 
1 {
2   "person":{
3     "name":"ys",
4     "website":"ys.com"
5   }
6 } 
{
  "person": {
    "name": "yy",
    "website": "yy.com"
  }
}

  2.5 各种传输格式的优缺点

    2.5.1 优点

      1. Html 传输格式不需要 js 解析 html 代码,可读性好,html 代码和 innerHtml 属性搭配效率高

      2. XML 是一种通用的传输格式,不必把数据强加到已经定义好的格式中,而为数据自定义合适的标记,且利用 DOM 可以完全掌握文档

      3. JSON 和 XML 相似但相比起来更加轻巧

    2.5.2 缺点

      1. 若需要使用 Ajax 更新一篇文档的多个部分则 html 不合适

      2. 当浏览器接收到较长的 XML 文档时 DOM 解析可能会很复杂

      3. JSON 的语法严谨,代码不宜读

    2.5.3 适用场景

      1. 若 application 不需要与其他程序共享数据时使用 HTML

      2. 如果数据需要重用 JSON 在性能和大小方面有优势

      3. 当远程程序未知时 XML 文档是首选

三、案例再实现(使用 JQuery 实现)

  案例效果如上,只是实现方式为 JQuery

  3.1 JQuery 中 Ajax 的 API

    1. load(url) -- -- 任何 HTML 节点都可以使用 load 方法加载 Ajax,它可以载入远程的 HTML 代码并插入 HTML 中,若需要使用部分内容则可以使用选择器(在定义 URL 的时候使用选择器)

    2. load 方法的传递方式根据 load 方法是否传递参数而定,若没有传递参数那么就是 get 请求方式,若有则为 post 请求方式

    3. 对于必须在完成加载才可以继续的操作,load() 方法提供了回调函数,该函数有三个参数,代表请求返回内容的 data,代表请求状态的 textStatus 对象和 XMLHttpRequest 对象

    4. $.get(url, args, function)  -- -- 使用 get 方式进行异步请求,data 代表返回的内容可以是 XML、Html、JSON 等数据格式;args 为 JSON 格式的传递参数;响应结束时触发回调函数,其响应结果在函数参数中

    5. $.getJSON() -- -- 对于 JSON 传输格式直接使用该方法,参数和 $.get() 方法一样

  3.2 HTML 数据传递格式

    htmlTest.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/12/04
 5   Time: 23:23
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>HtmlPage</title>
12     <script type="text/javascript" src="../jquery-1.7.2.js"></script>
13     <script type="text/javascript">
14         $(function () {
15             $("a").click(function () {
16 //                使用选择器,选择出 h3 标签部分
17                 var url = this.href + " h3";
18 //                参数
19                 var args = {"time": new Date()};
20 //                所有的 html 节点均可调用 load 方法将返回内容直接加入到目标标签内
21                 $("#htmlTest").load(url, args);
22                 return false;
23             });
24         })
25     </script>
26 </head>
27 <body>
28 <ul>
29     <li><a href="yy.html">YY Page</a></li><br>
30     <li><a href="SSPage.html">SS Page</a></li><br>
31     <li><a href="YYSSPage.html">YS Page</a></li><br>
32 </ul>
33 <div id="htmlTest"></div>
34 </body>
35 </html>

  3.3 XML 数据传输格式

  xmlTest.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/12/05
 5   Time: 8:41
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>XMLPage</title>
12     <script type="text/javascript" src="../jquery-1.7.2.js"></script>
13     <script>
14         $(function () {
15             $("a").click(function () {
16                 var url = this.href;
17                 var args = {"time": new Date()};
18
19                 $.get(url, args, function (data) {
20 //                    找到 name 节点属性值
21                     var name = $(data).find("name").text();
22                     var website = $(data).find("website").text();
23 //                    首先清空在添加节点,然后加入新建的节点
24                     $("#details").empty().append("<h2>" + name + "</h2><b>" + website + "</b>");
25                 });
26                 return false;
27             })
28         })
29     </script>
30 </head>
31 <body>
32 <ul>
33     <li><a href="yy.xml">YYPage</a></li>
34     <br><br>
35     <li><a href="ss.xml">SSPage</a></li>
36     <br><br>
37     <li><a href="ys.xml">YSPage</a></li>
38     <br><br>
39 </ul>
40 <div id="details"></div>
41 </body>
42 </html>

  3.4 JSON 数据传输格式

  jsonTest.html

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/12/04
 5   Time: 23:23
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>JSONPage</title>
12     <script type="text/javascript" src="../jquery-1.7.2.js"></script>
13     <script type="text/javascript">
14         $(function () {
15             $("a").click(function () {
16                 var url = this.href;
17                 var args = {"time": new Date()};
18
19                 $.getJSON(url, args, function (data) {
20                     var name = data.person.name;
21                     var website = data.person.website;
22
23                     $("#jsonTest").empty().append("<h3>" + name + "</h3><b>" + website + "</b>");
24                 })
25                 return false;
26             })
27         })
28     </script>
29 </head>
30 <body>
31 <ul>
32     <li><a href="yy.json">YY Page</a></li><br>
33     <li><a href="ss.json">SS Page</a></li><br>
34     <li><a href="ys.json">YS Page</a></li><br>
35 </ul>
36 <div id="jsonTest"></div>
37 </body>
38 </html>

  以上这些就是我所知道有关 Ajax 的一些知识,我们可以利用以上知识实现三级联动,演示如下:

  

  写的有不好的地方还望指出,谢谢!

原文地址:https://www.cnblogs.com/bgzyy/p/8109673.html

时间: 2024-10-06 21:30:40

Ajax 学习总结的相关文章

[ajax 学习笔记] json数据格式

之前写过ajax传送数据可以用普通文本和XML两种格式.这里记一下json数据格式. json:javascript object notation. 之前分析过,用文本和XML传送数据各有优劣.而json可以轻松地将javascript对象转换成可以随时发送的数据. 一个json数据例子: var people = { "programmers": [ { "firstName": "Brett", "lastName":&

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

Ajax学习教程在线阅读

  1.什么是AJAX ?(1) 2.什么是AJAX ?(2) 3.什么是AJAX ?(3) 4.什么是AJAX ?(4) 5.Ajax基础教程(1)-Ajax简介 1.1 Web应用简史 6.Ajax基础教程(1)-Ajax简介 1.2 浏览器历史 7.Ajax基础教程(1)-Ajax简介 1.3 Web应用的发展历程 8.Ajax基础教程(1)-Ajax简介 1.3 Web应用的发展历程(2) 9.Ajax基础教程(1)-Ajax简介 1.3 Web应用的发展历程(3) 10.Ajax基础教

Ajax 学习初步

Ajax学习 第一步.创建 XMLHTTPRequest 对象 为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXObject : var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera,Safari xmlhttp=new XMLHttpRe

dwr实现ajax学习

前一段时间看了一点dwr实现ajax的介绍信息,一直想找个机会看看到底怎么用.今天起了个早,试了一下感觉还挺好用的. 下面是我的一点学习总结: 一.配置DWR(http://getahead.org/dwr/getstarted)1.将dwr.jar包放在web-info/lib目录下2.编辑web.xml文件,添加servlet <servlet>  <servlet-name>dwr-invoker</servlet-name>  <display-name&

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

Ajax学习心得

Ajax学习心得 大致学了下Ajax,才知道它不是某种编程语言,而是一种在无需加载整个页面的情况下能够更新部分网页的技术.了解了它的功能后觉得这真是一种好的技术,这得给前端和运维省多少力啊! 传统的网页没有使用Ajax技术,当更新网页内容时要重新加载页面来重写页面,如果是整个网站,这工作量无疑是巨大的,但有了Ajax技术,我们在后台进行表单设计时,加入相关代码,实现异步输入输出,局部更新,这就使工作变得轻便.例如,现在很多的知名网站,像腾讯,新浪,谷歌,百度地图等等,都使用了这种技术. 而要学习

[ajax 学习笔记] ajax 的服务器响应

在上一篇[ajax 学习笔记] ajax初试中,简单了解了一下ajax. 我是参考AJAX详解.chm学习的,资源已上传.参考链接:Ajax 专题 今天又学习了ajax中关于服务器响应的一些知识. ajax中服务器的响应是通过响应函数将服务器返回的数据呈现到页面的.服务器的响应体现在服务器响应回调函数中. 在上一篇的例子中,响应函数为: function updatePage(){ if(xmlHttp.readyState == 4){ //http就绪状态 if(xmlHttp.status

ASP.net中的AJAX学习记录六 无刷新的数据编辑(GridView和DetailsView结合实例)(转)

本篇博客是仿照书中实例,实现GridView和DetailsView结合无刷新的数据编辑效果,页面效果:当点击GridView1的行或换页时,都会引发DetailsView1的数据绑定显示至页面,同时当使用DetailsView1编辑.删除.添加时,也会引起GridView1的重新绑定,整体页面实现无刷新. 页面布局: 1.新建AJAX窗口,命名为:"NoRefreshEdit.aspx".要想实现页面无刷新编辑,就必须使用两个Updatepanel. 2.在NoRefreshEdit

Ajax学习笔记(三)

三.jQuery库详解 1.使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象.js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面. 由此可见,使用jQuery动态更新HTML页面只需以下两个步骤: (1)获取jQuery对象.jQuery对象通常是DOM对象的包装 (2)调用jQuery对象的方法来改变自身.当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTM