JavaEE之Ajax

Ajax

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

实现

两种方式Js,jquery

1 js 方式

js:严格依赖XMLHttpRequest对象

  • XMLHttpRequest对象的方法
    • open(方法名(提交方式get post),服务器地址,ture) :与服务端建立连接
      最后一个参数一般为ture,代表是不是异步刷新
    • send() :
      • 如果是get请求:send(null)
      • 如果是post请求 send(参数值)
    • sendRequestHeader(header,value):
      • 如果是get请求:不需要设置此方法
      • 如果是post请求 需要设置
        • a. 如果请求元素中包含了文件上传:
          setRequestHeader(“Content-Type”,“multipart/form-data”);
        • b 不包含文件上传
          setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”);
  • XMLHttpRequest对象的属性
    • readyState:请求状态
      只有状态为4 代表请求完毕
      在这里插入图片描述
    • status:响应状态
      在这里插入图片描述
    • onreadystatechange:回调函数
      b()是a()的回调函数,当b()执行完,去执行a();
      在这里插入图片描述
    • responseText:响应格式为String
    • responseXML:响应格式为XML

js实例

在这里插入图片描述

1 post方式

在这里插入图片描述
前端代码

<head>
    <title>ajax</title>
    <script type="text/javascript">
        function register(){
            var mobile =document.getElementById("mobile").value;
            //通过ajax异步方式请求服务端
            xmlHttpRequest = new XMLHttpRequest(); //全局变量
            //设置xmlHttpRequest对象的回调函数
            xmlHttpRequest.onreadystatechange =callback


            xmlHttpRequest.open("post","MobileServlet",true) //建立连接 post方式
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //post方式设置头消息
            xmlHttpRequest.send("mobile="+mobile); //k=v
        }
     
        //定义回调函数(接受服务端的返回值)
        function callback() {
            if(xmlHttpRequest.readyState ==4&&xmlHttpRequest.status ==200){
                //接受服务端返回的数据
                var data=xmlHttpRequest.responseText;//服务端返回值为string格式
                if(data =="true"){
                    alert("此号码已存在,请更换");
                }else {
                    alert("注册成功");
                }

            }
        }



    </script>
</head>
<body>
    <!--原来是form action 是全局刷新-->
     手机:<input id="mobile"/><br/>
    <input type="button" value="注册" onclick="register()"/><br/>
</body>
2 get方式

前端代码

function registerGet(){
            var mobile =document.getElementById("mobile").value;
            //通过ajax异步方式请求服务端
            xmlHttpRequest = new XMLHttpRequest(); //全局变量
            //设置xmlHttpRequest对象的回调函数
            xmlHttpRequest.onreadystatechange =callback


            xmlHttpRequest.open("get","MobileServlet?mobile="+mobile,true) //建立连接 get方式
            xmlHttpRequest.send(null); 
        }

后端代码

@WebServlet(name = "MobileServlet",urlPatterns = "/MobileServlet")
public class MobileServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8"); //处理post请求编码
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");
        //get方式编码在tomcat server.xml中处理+URIEncoding="utf-8"
        String mobile= request.getParameter("mobile");
        //假设数据库只有一个号码 123
        PrintWriter out = response.getWriter();
        if("123".equals(mobile)){
            out.write("true"); //servlet以输出流的方式 将信息返回给客户端
        }else{
            out.write("false"); //servlet以输出流的方式 将信息返回给客户端
        }
        out.close();
    }
}

2 jquery 方式

格式1
$. ajax({
url:服务器地址,
请求方式(type):get|post,
data:请求数据,
success:function(result,testStatus)
{
},
error:functoin(xhr,errorMessage,e){

}

});
格式2
$. get(
服务器地址,
请求数据,
function(result)
{
},
预期返回值类型("xml"或 “json” 或 "text)
);
格式3
$. post(
服务器地址,
请求数据,
function(result)
{
},
预期返回值类型("xml"或 “json” 或 “text”)
);

示例格式1

 <script src="js/jquery.js"></script>

    <script type="text/javascript">
        function register(){
            var mobile =document.getElementById("mobile").value;
            $.ajax({
                url:"MobileServlet",
                type:"post",
                data:"mobile="+mobile,
                success:function(result,testStatus)
                {
                    if(result =="true"){
                        alert("已存在,注册失败");
                    }else {
                        alert("注册成功");
                    }
                },
                error:function(xhr,errorMessage,e){
                    alert("系统异常");
                }
            });

        }





    </script>
</head>
<body>
    <!--原来是form action 是全局刷新-->
     手机:<input id="mobile"/><br/>
    <input type="button" value="注册" onclick="register()"/><br/>

示例格式2/格式3

  <script type="text/javascript">
        function register(){
            var mobile =document.getElementById("mobile").value;
            $.post(
                "MobileServlet",
                 "mobile="+mobile,
                function(result) { if(result =="true"){
                     alert("已存在,注册失败");
                }else {
                       alert("注册成功");
                  }
                },
                "text"
        );
        }
            </script>

格式4 JQuery方式的Ajax-load
load:将服务端的返回值 直接加载到$(xxx)所选择的元素中,可将fuction省略
$(xxx). load(
服务器地址,
请求数据,
function(result) // 此项可有可无
{
}
);

前端示例

<head>
    <title>ajax</title>
    <script src="js/jquery.js"></script>

    <script type="text/javascript">
        function register() {
            var mobile = document.getElementById("mobile").value;
            $("#tip").load(
                "MobileServlet",
                "mobile=" + mobile
            )
        }




    </script>
</head>
<body>
    <!--原来是form action 是全局刷新-->
     手机:<input id="mobile"/><br/>
    <input type="button" value="注册" onclick="register()"/><br/>
    <span id="tip"></span>
</body>

后端
在这里插入图片描述
效果
在这里插入图片描述

格式5 JQuery方式的getJSON()
$.getJSON(
服务器地址,
JSON格式的请求数据,
function(result)
{
}
);

json对象
var student={“name”:“zs”,“age”:23};
json数组
var students=[
{“name”:“zs”,“age”:23} ,
{“name”:“ls”,“age”:23} ,
{“name”:“ww”,“age”:23}
];

前端示例

 <script type="text/javascript">
        function register() {
            var mobile = document.getElementById("mobile").value;

            $.getJSON(
                "MobileServlet",
                {"mobile":mobile,
                    "a":"b",
                    "c":"d"
                },
                function(result) {
                    if(result.msg =="true"){
                    alert("已存在,注册失败");
                }else {
                    alert("注册成功");
                }
                }
            );
        }

后端
返回值是字符串json
在这里插入图片描述
格式5 JQuery方式的getJSON()后端优化返回json对象
Ajax处理JSON对象

在这里插入图片描述
json中只有一个对象{“user1”:user对象}
前端

<script type="text/javascript">
        function register() {
            var mobile = document.getElementById("mobile").value;

            $.getJSON(
                "MobileServlet",
                {"name":"zs",
                    "age":24
                },
                function(result) {
                    //js通过eval()函数,将返回值转为一个js能够识别的json对象
                    var jsonstudent = eval(result.user1);
                    alert(jsonstudent.username+jsonstudent.password);

                }
            );
        }

后端
只有一个json对象

{"user1":{"password":"123","username":"xgh","userno":0}}

在这里插入图片描述
当json中有多个对象
{“user1”:user1,“user2”:user2,“user3”:user3}
前端

 $.getJSON(
                "MobileServlet",
                {"name":"zs",
                    "age":24
                },
                function(result) {
                    //json中有多个对象 此时result {"user1":user1,"user2":user2,"user3":user3}
                    //js通过eval()函数,将返回值转为一个js能够识别的json对象
                    var json = eval(result);
                    $.each(json,function (i,element) {
                        alert(this.username+"   "+this.password)

                    })


                }
               

后端
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值