AJAX

一 AJAX简介

异步刷新技术。A:Asynchronous(异步);J:javascript; A:and; X:xml

1.1AJAX实现的效果示例:

1.2AJAX实现的原理

首先要知道:数据都是在服务器上的,要获取数据,就必须要向服务器发送请求。然后等待服务器的响应。通过form表单提交或者通过url地址栏,或者超链接等等技术进行请求的发送,都是同步的,整个页面是会刷新的。

二原生JavaScript编写AJAX

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>使用原生javascript实现AJAX请求</title>

<style>

#msg{

border:#F00 1px solid;

widht:300px;

height:100px;

}

</style>

<script>

var getdata = function(){

//1.创建ajax对象

        //只兼容非ie6的浏览器,在ie6浏览器上运行会提示没有被定义

        //var oAjax = new XMLHttpRequest();//这才是ajax实际的请求

        

        //ie6浏览器下按照下面方法写,但是在别的浏览器中不能用,会报错。

        //var oAjax = new ActiveXObject("Microsoft.XMLHTTP");

        

        //鉴于上面出现的问题,可以采取下面的方法解决,用if判断是否为IE6浏览器

        //如果有XMLHttpRequest,那就是非IE6浏览器。()里面加window的原因下面会有描述。

        var oAjax;

        if(window.XMLHttpRequest){

            oAjax = new XMLHttpRequest();//创建ajax对象

        }

        else{//如果没有XMLHttpRequest,那就是IE6浏览器

            oAjax = new ActiveXObject("Microsoft.XMLHTTP");//IE6浏览器创建ajax对象

        }

        

        //2.连接服务器

        //open(方法、文件名、异步传输)

        //方法:

            //传输方式是get方式还是post方式。

        //文件名(资源地址)

            //告诉服务器要读哪个文件

        //异步传输

            //异步:多件事一件一件的做

            //同步:多件事情一起进行

            //但是js里面的同步和异步和现实的同步异步相反。

                //同步:多件事一件一件的做

                //异步:多件事情一起进行

        //ajax天生是用来做异步的

        oAjax.open("GET","/Servlet4/ajax1",true);

        

        //3.发送请求

        oAjax.send();

        

        //4.接收返回

        //客户端和服务器端有交互的时候会调用onreadystatechange

        oAjax.onreadystatechange=function(){

            //oAjax.readyState  //浏览器和服务器,进行到哪一步了。

                //0->(未初始化):还没有调用 open() 方法。

                //1->(载入):已调用 send() 方法,正在发送请求。

                //2->载入完成):send() 方法完成,已收到全部响应内容。

                //3->(解析):正在解析响应内容。

                //4->(完成):响应内容解析完成,可以在客户端调用。

            if(oAjax.readyState==4){

                if(oAjax.status==200){//判断是否成功,如果是200,就代表成功(判断HTTP协议状态)

                   //oAjax.responseText  从服务器响应回来的消息

                   document.getElementById("msg").innerHTML=oAjax.responseText;

                }

                else{

                    alert("失败");

                }

            }

        }

}

</script>

</head>

<body>

<p>需求:通过AJAX技术从服务上获取一个字符串,然后将此字符串显示在页面的指定位置。</p>

<input type="button" id="btn" value="获取" onclick="getdata();"/>

<div id="msg">

在这里显示数据:

</div>

</body>

</html>

//对应的servlet

@WebServlet("/ajax1")

public class Ajax1 extends HttpServlet {

private static final long serialVersionUID = 1L;

 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

out.println("这是从服务器servlet传输过来的消息");

out.flush();

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三 JQuery实现AJAX

3.1简单示例

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>使用jquery实现AJAX请求</title>

<script type="text/javascript" src="/Servlet4/js/jquery-3.3.1.min.js"></script>

<style>

#msg{

border:#F00 1px solid;

widht:300px;

height:100px;

}

</style>

<script type="text/javascript">

var getdata = function(){

$.ajax({

   type: "GET", //发送http请求的方法(get/POST)

   url: "/Servlet4/ajax1", //请求的资源路径

   success: function(msg){ //成功后的回调函数

   //在这里进行成功后的处

     $("#msg").html(msg);

   }

});

};

 

</script>

</head>

<body>

<p>需求:通过AJAX技术从服务上获取一个字符串,然后将此字符串显示在页面的指定位置。</p>

<input type="button" id="btn" value="获取" onclick="getdata();"/>

<div id="msg">

在这里显示数据:

</div>

</body>

</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2jquery.AJAX()方法

$.ajax(url,[settings])方法;$.ajax({json对象})

 Url:需要请求的资源路径

Settings:可以有很多的属性。而且每个属性都是可选的。

Json对象中的常用属性介绍:

Url: 路径

Type: 请求方式

Data: 发送的数据(type=post的时候使用)

dataType:发送和接收的数据格式(XML、HTML、Script、JSON、JSONP、text

Success:成功后的回调函数

3.3 实现注册用户验证示例

需求:注册用户时,如果已存在该用户,则提示“用于已被注册”,否则提示“恭喜,该用户名可以使用”

实现思路:

  1. 焦点离开用户名文本框的时候,向服务器发送验证请求(并且将输入的用户名发送到服务器);
  2. 在servlet中验证用户名是否已存在,然后将结果响应给浏览器
  3. 根据servlet的响应结果,进行不同的处

具体实现:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>注册验证用户名示例</title>

<script type="text/javascript" src="/Servlet4/js/jquery-3.3.1.min.js"></script>

<script type="text/javascript">

var ck = function(){

var uname = $("#username").val();

alert(uname);

$.ajax({

   type: "POST",

   url: "/Servlet4/checkuser",

   data: "username="+uname,

   success: function(msg){

   alert(msg);

     if(msg == "0"){

      $("#msg").html("恭喜该用户名可以使用");

     }else{

      $("#msg").html("该用户已被注册");

     }

   }

});

};

 

</script>

</head>

<body>

用户名:<input type="text" name="username" id="username" onblur="ck();" />

<font id="msg"></font>

</body>

</html>

@WebServlet("/checkuser")

public class CheckUser extends HttpServlet {

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String username = request.getParameter("username");

String str = "0";

if(username.equals("zhangsan")){

//存在

str = "1";

}

PrintWriter out = response.getWriter();

out.print(str);

out.flush();

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 使用json传输数据

4.1 json对象的结构

Var data ={

Username:zhangsan,

Userpwd:123456

}

Var arrs = [{username:”zhangsan”,userpwd:”123456”}];

4.2 从服务器响应json对象到浏览器

需求:浏览器请求服务器发送一个用户的详细信息;然后在页面上显示用户的用户名和密码。

1、不使用JSON的情况下的解决方案

思路:例如需要传输数据:zhangsan(用户名)和123456(密码)。可以将这两个数据拼接到一起,中间用一个特殊字符将其分割。例如:(zhangsan,123456);然后,在前端收到这个消息之后,根据分割的字符将字符串拆分成一个字符串数组。这样就可以获取到用户名和密码了。

程序实现:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String username = "zhangsan";

String userpwd = "123456";

String msg = username+","+userpwd;

PrintWriter out = response.getWriter();

out.print(msg);

out.flush();

}

var getuser = function(){

$.ajax({

   type: "GET",

   url: "/Servlet4/getuser",

   success: function(msg){

     alert(msg);

     var arrs = msg.split(",");

     $("#uname").val(arrs[0]);

     $("#upwd").val(arrs[1]);

   }

});

}

 

 

 

 

 

 

 

 

 

 

 

 

 

问题分析:上面的程序虽然可以实现这个功能。但是如果需要传输的数据中包含“,”,那么在JS中的解析就会有问题。第二个问题,如果传输的是比较复杂的对象,那么在JS中的解析就比较麻烦。

2、使用JSON对象来传输数据解决方案

实现步骤:

  1. 首先定义好所需要的json对象的格式(字符串的格式)
  2. 当浏览器获取到这个json字符串的时候,在JS中使用eval()方法,将字符串转换为JS对象。
  3. 然后就可以在JS中直接使用对象的属性了。

JSON字符串格式定义:

User={username:”zhangsan”,userpwd:”123456”}

 

 

在servlet中构建上面的字符串:

String msg = "user={username:'"+username+"',userpwd:'"+userpwd+"'}";

 

 

在JS中使用上面的字符串:

//eval函数将字符串转换为JS对象。

eval(msg);

$("#uname").val(user.username);

$("#upwd").val(user.userpwd);

 

 

 

 

问题分析:这样使用JSON对象,那么在JS端使用非常方便,但是手动在servlet中构建JSON字符串是非常麻烦的事情。那么程序猿肯定是不会去做这种细致的体力活的,如何解决?可以将构建JSON字符串的功能进行封装(思考,如何封装一个将实体对象转换为JSON字符串的功能)。

 

五 FASTJson组件的应用

1、引用fastjson.jar的依赖包

 

 

2、在servlet中使用fastjson组件将实体对象转换为json字符串

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//构建一个实体对象

User u= new User();

u.setUsername("lis");

u.setUserpwd("1111111");

//调用toJSONString将JAVA对象转换为一个JSON字符串

        //toJsonString方法不仅可以转换实体,还可以转换list,map等等

String msg = JSONObject.toJSONString(u);

PrintWriter out = response.getWriter();

out.print(msg);

out.flush();

}

 

 

 

 

 

 

 

 

3、在JS中获取数据

var getuser = function(){

$.ajax({

   type: "GET",

   url: "/Servlet4/getuser",

   dataType:"JSON", //将dataType设置为JSON后,user就是一个json对象

   success: function(user){

     $("#uname").val(user.username);

     $("#upwd").val(user.userpwd);

   }

});

}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值