玩转AJAX

2018-05-14  本文已影响21人  codingXiaxw

title: 玩转AJAX
tags: AJAX 异步请求
categories: AJAX 异步请求


客户端向服务器发送请求,若服务器每次响应过来的结果都要重新加载整个界面的话这样会给服务器带来很大的压力。所以ajax出现了,它是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的技术,是一种使用现有标准的新方法。

AJAX是什么

1.asynchronous javascript and xml,翻译过来就是异步的js和xml。2.它能使用js语言访问服务器,而且是异步访问。3.服务器给客户端的响应一般是整个页面,一个html完整页面但在ajax中因为是局部刷新,那么服务器就不用再响应整个页面而只是响应局部。

服务器向客户端返回的数据类型

一般客户端向服务器发送请求,服务器返回的数据类型有三种:

理解同步交互和异步交互

附上uml图解释这两者的区别:


image

ajax常见应用情景

ajax的优缺点

如何使用ajax来发送异步请求

第一步(首先要得到XMLHttpRequest)

大多数浏览器都只是得到该对象的方法为:var xmlHttp=new XMLHttpRequest();

IE6.0得到的方法为:var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

IE5.0以及更早版本的IE:var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

<script>中编写创建XMLHttpRequest对象的函数:

    function createXMLHttpRequest(){
            try{
                return new XMLHttpRequest();
            }catch(e){
                try{
                    return new ActiveXObject(“Msxml2.XMLHTTP”);
                }catch(e){
                    try{
                        return new ActiveXObject(“Microsoft.XMLHTTP”);
                    }catch(e){
                        alert(“哥们,你用的是什么浏览器啊”);
                        throw e;
                    }
                }
            }
        }

第二步(打开与服务器的连接)

xmlHttp.open("","",boolean):用来打开与服务器的连接,它需要三个参数。1.请求参数,可以是get可以是post。2.请求的url:指定服务器端资源。3.请求是否异步,如果为true表示发送异步请求,否则发送同步请求。例如xmlHttp.open("GET","项目名称/AServlet",true);

第三步(发送请求)

xmlHttp.send(参数):参数为请求体内容。如果请求方式是get,则参数为null(不可以省略null),因为get请求方式的请求体为空;如果请求方式为post,则参数为请求体,另外还需要在此方法前面增加一个mlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);设置请求头的方法。

第四步

给xmlHttp对象注册onreadystatechange监听器,这个方法用于接收从服务器发送过来的响应数据。 在该方法中需要做以下步骤:

1.获取xmlHttp对象的状态,xmlHttp对象一共有5个状态:

该状态通过调用xmlHttp.readyState得到。

2.得到服务器响应的状态码:通过调用xmlHttp.status得到,例如200,404,500。

3.得到服务器响应的内容,由于服务器返回的类型不同,所以得到的内容类型也不同,以下3种类型采用3种方法得到:

完成第四步我们需要写的完整代码为:

    xmlHttp.onreadystatechange=function(){//xmlHttp的5种状态都会调用本方法
        if(xmlHttp.readState==4&&xmlHttp.status==200){//双重判断:判断是否为4状态,而且还要判断是否为200
            //获取服务器的响应内容
            var content=xmlHttp.responseText;//或var content= xmlHttp.responseXML;
        }
    } 

案例:省市联动

说明,该案例就是在网页上显示两个下拉列表,一个列表用于显示中国所有的省份,一个列表用于显示相应省份下的城市,当然这些数据是存在数据库中的,为了方便展示,我只在数据库中列举了两个省份和部分城市。

domain包下的city.java和province.java代码如下:

image
image

servlet包下的CityServlet.java与ProvinceServlet.java,用于向客户端发送响应数据代码如下:

image
image

dao包下的ProvinceDao.java代码如下:用于与数据库连接:

image

最终要的界面代码关于ajax的操作,代码如下:

image
image
image

数据库中的表有两张,一张是省份表province,一张是城市表city,如下:

image
image

结果如下:

image

当选择了相应的省份时,ajax会立即向服务器发送请求,然后服务器返回该省份下所有的城市,ajax将这些城市动态的显示在"请选择城市"列表中。达到部分刷新界面的效果。

2018.3.19更

欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!

联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

上一篇 下一篇

猜你喜欢

热点阅读