Ajax简介

Ajax简介

1.概念

Ajax全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML)。

Ajax其实质是利用浏览器提供的一个特殊的对象(XMLHttpRequest)异步地向服务器发送请求,服务器返回部分数据,浏览器让你去利用这些数据对象页面做部分的更新,整个过程,页面无刷新,不打断用户的操作。

同步和异步的区别

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>$Title$</title>
            <script type="text/javascript">
                function checkAccount(account){
                    location.assign("checkAccount?account="+account);//同步的get请求   
    </script>  
    </head>  
    <body>  
        <%--enctype="application/x-www-form-urlencoded" 表单的默认数据提交方式--%>  
            <form>    
                账号:<input type="text" onblur="checkAccount(this.value)"><span id="msgId"></span><br/>    
                密码:<input type="text" ><br/>    
                  
            </form>  
            </body>
        </html>
  1. 同步:目前与服务器端的交互方式是同步,当客户端与服务器交互时,客户端就不能进行其他操作,只能等待服务器端的响应,会刷新页面。

    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.io.PrintWriter;
    
    @WebServlet(name = "check" ,urlPatterns = "/checkAccount")
    public class CheckAccountServlet extends HttpServlet {
        //同步
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String account = req.getParameter("account");
            if (account.equals("admin")){
                req.setAttribute("msg","账号已存在");
            }else{
                req.setAttribute("msg","√");
            }
            req.getRequestDispatcher("index.jsp").forward(req,resp);
        }
    }
    
  2. 异步:当客户端正在进行正常操作时,还可以同时与服务器进行交互,服务器想客户端响应信息,将信息更新到网页局部,整个过程页面不刷新。

2.异步操作

XMLHttpRequest对象:发送请求到服务器并获得返回结果。

var httpobj = new XMLHttpRequest();//1.创建XMLHttpRequest()对象,是浏览器对象

JavaScript对象XMLHttpRequest是整个Ajax技术的核心,他提供了异步发送请求的能力。

常用方法:

方法名说 明
open(method,URL,async)建立与服务器的连接method参数指定请求的HTTP方法,典型的值是GET或POSTURL参数指定请求的地址async参数指定是否使用异步请求,其值为true或false
send(content)发送请求content参数指定请求的参数
setRequestHeader(header,value)设置请求的头信息
Get方式提交:
xmlhttp.open("GET","testServlet?name="+userName,true);
xmlhttp.send(null);  
Post方式提交
xmlhttp.open("POST","testServlet",true);
POST方式需要自己设置http的请求头
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
POST方式发送数据
xmlhttp.send("name="+userName);

常用属性:

onreadystatechange:事件,指定回调函数
readystate: XMLHttpRequest的状态信息

就绪状态码说 明
0XMLHttpRequest对象没有完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应,还没有结束
4XMLHttpRequest对象读取响应结束

status:HTTP的状态码

状态码说 明
200服务器响应正常
400无法找到请求的资源
403没有访问权限
404访问的资源不存在
500服务器内部错误

responseText:获得相应的文本内容。

package servlet;

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.io.PrintWriter;

@WebServlet(name = "check" ,urlPatterns = "/checkAccount")
public class CheckAccountServlet extends HttpServlet {
    //异步
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String account = req.getParameter("account");//接收请求
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        if (account.equals("admin")){
            out.print("账号已存在");//3.对异步的请求进行响应,将响应内容返回给XMLHttpRequest对象
        }else{
            out.print("√");
        }

    }
}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
    <script type="text/javascript">
        function checkAccount(account) {
            //异步请求
            var httpobj = new XMLHttpRequest();//1.创建XMLHttpRequest()对象,是浏览器对象
            //2.打开链接,发送请求
            httpobj.open("get", "checkAccount?account=" + account, true);
            httpobj.setRequestHeader("content-type", "application/x-www-form-urlencoded");
            httpobj.send("account=" + account + "&name=123");//发送请求
            //4.接受响应请求
            httpobj.onreadystatechange = function () {//onreadystatechange:事件,指定回调函数
                if (httpobj.readyState == 4 && httpobj.status == 200) {
                    document.getElementById("msgId").innerText = httpobj.responseText;
                }//readyState:XMLHttpRequest的状态信息;4:XMLHttpRequest对象读取响应结束

            }
        }
    </script>
</head>
<body>
<%--enctype="application/x-www-form-urlencoded" 表单的默认数据提交方式--%>
<form>
    账号:<input type="text" onblur="checkAccount(this.value)"><span id="msgId"></span><br/>
    密码:<input type="text"><br/>
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值