Ajax入门

Ajax:异步js和xml

    异步刷新:如果网页中某一个地方需要修改,异步刷新可以使:只刷新需要修改的地方,而页面其他地方保持不变

实现方法

1.js:

    XMLHttpRequest对象

    XMLHttpRequest对象的方法:
        open(方法名(提交方式get/post),服务器地址,true):与服务器建立连接(true代表异步刷新,false为同步)
        send():
                get: send(null)
                post: send(参数值)
        setRequestHeader(header,value):
                get:不需要设置此方法
                post:需要设置:
                        a.如果请求元素包含了文件上传
setRequestHeader(“content-Type”,“multiparty/form-data”)
                        b.不包含文件上传
setRequestHeader(“content-Type”,“application/x-www-form-urlencoded”)

        XMLHttpRequest对象的属性值:
                readystate:请求状态 只有状态是4的时候代表请求完毕
在这里插入图片描述
                status:响应状态:
在这里插入图片描述
                onreadytatechange: 回调函数
                responseText: 相应格式是String格式
                responseXML: 相应格式是xml格式

程序功能:
        用户输入一个电话,如果为123456789则显示已经注册,其他则提示注册成功(post方法)

代码演示
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charst=UTF-8">
      <script type="text/javascript">
        function register() {
            var mobile=document.getElementById("mobile").value;
            //通过Ajax异步方式请求服务端
            xmlHttpRequest=new XMLHttpRequest();
            //设置xmlHttpResquest对象的回调函数
            xmlHttpRequest.onreadystatechange=callBack;   //方法的引用,不用写括号

            xmlHttpRequest.open("post","MobileServlet",true);
            //设置post方式的头信息
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttpRequest.send("mobile="+mobile);
        }
        //定义回调函数(接受服务器的返回值)
        function callBack() {
            if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
                //接受服务器返回的数据
                var data=xmlHttpRequest.responseText;    //服务端返回值为String格式
                if(data=="true"){
                    alert("此号码已存在,请更换")
                }else {
                    alert("注册成功")
                }
            }
        }
      </script>
    <title>$Title$</title>
  </head>
  <body>
  <input id="mobile"/>
  <br/>
  <input type="button" value="注册" onclick="register()"/>
  </body>
</html>

MobileServlet.java

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("/MobileServlet")
public class MobileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding( "utf-8" );
        resp.setCharacterEncoding( "utf-8" );
        resp.setContentType( "text/html;charset=UTF-8" );
        String mobile=req.getParameter( "mobile" );

        PrintWriter out=resp.getWriter();
        if("123456789".equals(mobile)){
            out.write( "true" );            //servlet以输出流的方式,将信息返回给客户端
        }else {
            out.write( "false" );
        }
        out.close();        //关闭输出流
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet( req,resp );
    }
}

get方式:(修改index.jsp的第13行)

xmlHttpRequest.open("get","MobileServlet?mobile="+mobile,true);
xmlHttpRequest.send(null);

2.jQuery:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charst=UTF-8">
  <script type="text/javascript" src="js/jquery-3.5.0.js"></script>
  <script type="text/javascript">
      function register() {
          var $mobile=$("#mobile").val();
          $.ajax({
              url:"MobileServlet",
              请求方式:"post",
              data:"mobile="+$mobile,
              success:function(result){
                  if(result=="true"){
                      alert("已存在!注册失败!");
                  }else{
                      alert("注册成功!");
                  }
              },
              error:function(){
                  alert("系统异常!");
              }
          })
      }
  </script>
  <title>$Title$</title>
</head>
<body>
	<input id="mobile"/>
	<br/>
	<input type="button" value="注册" onclick="register()"/>
</body>
</html>

补充:
get方法
$.get(
    服务器地址:
    请求数据:
    function(result){
    },
    预期返回值类型(String\xml)
);
post方法
$.post(
    服务器地址:
    请求数据:
    function(result){
    },
    预期返回值类型(String\xml)
);
load方法
$("").load(
    服务器地址,
    请求数据,
    function(result){
    }
)

load方法代码演示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charst=UTF-8">
  <script type="text/javascript" src="js/jquery-3.5.0.js"></script>
  <script type="text/javascript">
      function register() {
          var $mobile=$("#mobile").val();
          $("#tip").load(
              "MobileServlet",
              "mobile="+$mobile
          )
      }
  </script>
  <title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
<span id="tip"></span>
</body>
</html>

*JSON方式:(返回值是一个JSON格式的数据)
$.getJSON(

)
代码演示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charst=UTF-8">
  <script type="text/javascript" src="js/jquery-3.5.0.js"></script>
  <script type="text/javascript">
      function register() {
          var $mobile=$("#mobile").val();
          $.getJSON(
              "MobileServlet",
              {"mobile":$mobile},
              function (result) {
                  if(result.msg=="true"){
                      alert("已存在")
                  }else{
                      alert("注册成功")
                  }
              }
          )
      }
  </script>
  <title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
<span id="tip"></span>
</body>
</html>

由于返回的是JSON格式,所以不能用String和JSON比较,所以需要修改MobileServlet的内容,使返回值变成JSON类型

if("13026373922".equals(mobile)){
            out.write( "{\"msg\":\"true\"}" );
        }else {
            out.write( "{\"msg\":\"false\"}" );
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值