Ajax技术

同步和异步的区别

Ajax:Asynchronous JavaScript and xml (json)

异步的js和xml,js中的异步方法

Asynchronous:异步的,同时可以有多个线程执行,效率高,不安全

Synchronized:同步的,同时只有一个线程能被执行,效率低,安全

什么是Ajax

Ajax 即Asynchronous Javascript And XML(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

Ajax的优点和缺点

优点:

1.最大的优点就是页面局部刷新,在页面内与服务器通信,非常好的用户体验。

2.使用异步的方式与服务器通信,不需要中断操作。

3.可以把以前服务器负担的工作转嫁给客户端,减轻服务器和带宽,可以最大程度减少冗余请求。

缺点:

1.AJAX干掉了Back和History功能,即对浏览器机制的破坏。在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。

2.ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。

3.对搜索引擎的支持比较弱。如果使用不当,AJAX会增大网络数据的流量,从而降低整个系统的性能。

Ajax第一例之发送GET请求

使用ajax GET请求完成输入完用户名后离开输入框,校验用户名是否存在

创建login.jsp登录页面 原生的Ajaxget请求。

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/2/25
  Time: 18:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="jquery-1.7.2.js"></script>
</head>
<form action="AjaxGetServlet" method="post" onsubmit="return $('#sp').html()=='ok'">
   名字: <input type="text" name="username" id="username"><span id="sp"></span><br>
   密码: <input type="password" name="password" ><br>
<input type="submit" value="提交">
</form>
<body>
<script>
$("#username").blur(function () {
//   获取输入框的值
    var un=$(this).val();
 1.创建ajax的对象,创建一个http的请求对象
          var ajax=new XMLHttpRequest();
//    打开链接
    //            请求方式      url
        ajax.open("get","/AjaxGetServlet?un="+un);
//    发送请求
        ajax.send(null);
//    监听  看ajax的状态是否发生改变
        ajax.onreadystatechange=function (ev) {
if (ajax.readyState==4){
$("#sp").html(ajax.responseText);
            }
        }

    })
</script>
</body>
</html>

java后台代码

package servlet;

import pojo.User;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/AjaxGetServlet")
public class AjaxGetServlet extends HttpServlet {
@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.setContentType("text/html;charset=UTF-8");
        String un = req.getParameter("un");
     if (un.length()==0){
            resp.getWriter().write("不能为空");
            return;
        }
        UserService service=new UserService();
        List<User> userList = service.showAll();
       for (User user : userList) {
      if (user.getName().equals(un)){
          resp.getWriter().write("名字重复");
               return;
            }
        }
        resp.getWriter().write("ok");
    }
}
Ajax第一例小结
1. 原生Ajax操作步骤:
    - 创建XMLHttpRequest对象;
    - 调用open()方法打开与服务器的连接;
    - 调用send()方法发送请求;
    - 为XMLHttpRequest对象指定onreadystatechange事件函数,这个函数会在XMLHttpRequest的1、2、3、4,四种状态时被调用;
2. XMLHttpRequest对象的5种状态:
    - 0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法;
    - 1:请求已开始,open()方法已调用,但还没调用send()方法;
    - 2:请求发送完成状态,send()方法已调用;
    - 3:开始读取服务器响应;
    - 4:读取服务器响应结束。
通常我们只关心4状态。
Ajax之Jquery的实现方式

$.get方式

语法:$.get(url, [data], [callback], [type])
参数:
    url:请求路径
    data:请求参数
    callback:回调函数
    type:响应结果的类型

$.post方式

 语法:$.post(url, [data], [callback], [type])
 参数:
     url:请求路径
     data:请求参数
     callback:回调函数
     type:响应结果的类型

$.ajax方式

语法:$.ajax({键值对});
 可选字段:
    1)url:链接地址,字符串表示
    2)data:需发送到服务器的数据,GET与POST都可以,格式为{A: '...', B: '...'}
    3)type:"POST" 或 "GET",请求类型
    4)contentType:内容类型,默认为"application/x-www-form-urlencoded"
    5)dataType:服务器响应的数据类型,字符串表示;当填写为json时,回调函数中无需再对数据反序列化为json
    6)success:请求成功后,服务器回调的函数
    7)error:请求失败后,服务器回调的函数
8)async:是否异步处理,bool表示,默认为true;设置该值为false后,JS不会向下执行,而是原地等待服务器返回数据,并完成相应的回调函数后,再向下执行

定义jquery_ajax.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用jQuery发送ajax请求</title>
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
        //页面加载完成后执行的事件
        $(function () {
            //为用户名输入框绑定失去焦点事件
            $("#username").blur(function() {
                // 当用户输入完成账号之后,我就进行账号的验证操作
                var username = $("#username").val();
                //$.get发GET请求
                /*$.get("/day11/user?method=findByUsername&username="+username,
                    // 调用服务端成功后的回调函数
                    function(data){
                        // 完成了响应了,获取响应结果
                        $("#spanText").text(data);
                    }
                );*/
                //$.post发POST请求
                /*$.post("/day11/user",{"method":"findByUsername","username":username},
                    // 调用服务端成功后的回调函数
                    function(data){
                        // 完成了响应了,获取响应结果
                        $("#spanText").text(data);
                    }
                );*/
                //$.ajax发ajax请求
                $.ajax({
                    url:"/day11/user",
                    data:{"method":"findByUsername","username":username},
                    type:"POST",
                    dataType:"text",
                // 调用服务端成功后的回调函数
                    success: function(data){
                                // 完成了响应了,获取响应结果
                                $("#spanText").text(data);
                            }
                });
            });
        });
    </script>
</head>
<body>
    <form action="${pageContext.request.contextPath}/login" method="post">
        账号:<input type="text" name="username" id="username"><span style="color:red;" id="spanText"></span><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值