• Ajax异步请求


    Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
    Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。
    这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

      简而言之:一项通过js技术发送异步请求 的技术。

    Ajax技术的核心是XMLHttpRequest。Ajax就是通过XMLHttpRequest对象来发送异步的请求。

    1.js原生Ajax的开发步骤

    1. 创建Ajax引擎对象--XMLHttpRequest对象;

    2. 为XMLHttpRequest对象绑定监听(监听服务器,将数据响应给引擎);

    3. 绑定提交地址;

    4. 发送请求;

    5. 接收响应数据;

     2.js原生的Ajax代码实现

    【案例】js原生的Ajax演示

    【需求】

    1. 点击页面按钮发送请求到后台Servlet;

    2. 后台Servlet接收数据后,给出响应;

    3. 页面接收响应数据;

    demo1.html

    <!--demo1.html-->

    <html> <head> <title></title> </head> <body> <button id="btn" onclick="sendAjax();">点击后,发送Ajax请求</button> </body> <script> function sendAjax() { //js原生的Ajax实现 //1.创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); //2.给XMLHttpRequest对象绑定监听 xhr.onreadystatechange = function () { if(xhr.readyState == 4 && xhr.status == 200) { //5.接收响应 alert(xhr.responseText); } } //3.绑定提交地址 /** * GET:请求方式; * url:请求地址 * flag: true--异步请求,false--同步请求 */ xhr.open("GET", "/ajaxServlet", true); //4.发送请求 xhr.send(); } </script> </html>

      

    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;
    
    
    @WebServlet(name = "AjaxDemo", urlPatterns = "/ajaxServlet")
    public class AjaxDemo extends HttpServlet {
    
        /**
         * 接收ajax请求
         */
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("传智播客");
        }
    }
    

      

    jQuery的Ajax

    js原生的Ajax虽然能够向后台发送请求,但是太过繁琐。jQuery对原生的Ajax方法进行了封装,下面是开发中使用的比较多的3种jQuery的Ajax实现。

    【注意】以上3种方法都是基于jQuery实现的,所以在使用之前必须先导入jquery的类库。

    1、GET请求

    1.1、GET请求方式概述

    ​ 通过远程HTTP GET请求发送请求。这是一个简单的GET请求,以取代复杂的$.ajax。请求成功时可调用回调函数。如需复杂的ajax请求参数设置,请使用$.ajax

    1.2、GET请求的语法格式

    $.get(url,[data],[callback],[type])

    其中,参数说明如下:

    参数说明
    url 请求地址
    data 发送给服务器端的请求参数,格式:<br />方式一:key=value&key=value<br />方式二:{key:value,key:value...}
    callback 回调函数:当请求成功后触发的函数
    type 返回参数类型:取值可以是xml, html, script, json, text, _defaul等

    1.3、GET请求案例

    【案例】GET请求案例

    【需求】

    1. 点击按钮后,数据"name='张三',age=18"发送到后台服务器;

    2. 后台接收到数据后,响应"OK";

    demo2.html

    <!--demo2.html-->
    <html>
    <head>
        <title>Title</title>
        <script src="js/jquery-3.3.1.js"></script>
    </head>
    <body>
    <button onclick="ajaxGetFn();">send</button>
    </body>
    <script>
        //按钮单击事件
        function ajaxGetFn() {
    
            //Ajax的GET请求:
            //方式一:key=value&key=value形式传值
            // $.get("/getDemo","name='张三'&age=18",function (res) {
            //     //处理响应数据
            //     alert(res);
            // },"text");
    
            //方式二:{key:value,key:value}形式传值
            $.get("/getDemo",{"name":"张三","age":18},function (res) {
                //处理响应数据
                alert(res);
            },"text");
    
        }
    </script>
    </html>
    

      

    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;
    
    @WebServlet(name = "GetDemoServlet", urlPatterns = "/getDemo")
    public class GetDemoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //处理post请求和响应乱码问题
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //获取请求参数
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            response.setContentType("text/html; charset=utf-8");
            response.getWriter().print("ok!  name="+name+"; age="+age);
        }
    }
    

      

    2、POST请求

    2.1、POST请求方式概述

    ​ 通过远程 HTTP POST 请求载入信息。这是一个简单的 POST 请求功能,如需复杂的ajax参数设置请使用$.ajax。

    2.2、POST请求的语法格式

    $.post(url, [data], [callback], [type])其中,参数说明如下:

    参数说明
    url 请求的服务器端url地址
    data 发送给服务器端的请求参数,格式可以是key=value,也可以是js对象
    callback 当请求成功后的回调函数,可以在函数体中编写我们的逻辑代码
    type 预期的返回数据的类型,取值可以是 xml, html, script, json, text, _defaul等

    2.3、POST请求案例

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
        <script src="js/jquery-3.3.1.js"></script>
    </head>
    <body>
    
        <button onclick="ajaxPostFn();"> Ajax的post请求,发送数据到后台</button>
    </body>
    
        <script>
            //按钮单击事件
            function ajaxPostFn(){
    
                $.post("/postDemo",{"name":"李四","age":13},function(res){
                    alert(res)
                });
    
            }
        </script>
    </html>
    

      

    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;
    
    
    @WebServlet(name = "PostDemoServlet", urlPatterns = "/postDemo")
    public class PostDemoServlet extends HttpServlet {
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取请求参数
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("ok! name="+name+";age="+age);
    
        }
    
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //处理post请求和响应乱码问题
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            doGet(request, response);
        }
    }
    

      

    3、Ajax请求

    3.1 Ajax请求概述

    ​ 通过 HTTP 请求加载远程数据。jQuery 底层 A JAX 实现。简单易用的高层实现见get和post方法。$.ajax()方法可以更加详细的设置底层的参数。

    3.2 A JAX请求方式语法

    $.ajax([settings])其中,settings是一个js字面量形式的对象,格式是{name:value,name:value... ...},常用的name属性名如下:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
        <script src="js/jquery-3.3.1.js"></script>
    </head>
    <body>
        <button onclick="ajaxDemoFn()">Ajax请求</button>
    </body>
        <script>
            /*
            * 绑定事件
            * */
            function  ajaxDemoFn() {
                $.ajax({
                    url:"/ajaxDemo",
                    data:{"name":"哈哈哈","age":4},
                    async:true,
                    type:"GET",
                    dataType:"text",
                    success:function (succRes) {
                        alert(succRes);
                    },
                    error:function (errorRes) {
                        alert("出现异常了")
                    }
                });
            }
        </script>
    </html>
    

      

    package com.heima.ajax;
    
    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;
    
    /**
     * @author buguniao
     * @desc
     * @date 2018-07-02:16:40
     * @copy 本项目版权归java31期所有,未经许可不得私自复制,否则,要承当法律责任
     */
    @WebServlet(name = "AjaxDemo", urlPatterns = "/ajaxDemo")
    public class AjaxDemo extends HttpServlet {
    
        /**
         * 接收ajax请求
         */
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取请求参数
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("ok! name="+name+";age="+age);
        }
    
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //处理post请求和响应乱码问题
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            doGet(request, response);
        }
    }
    

      

    转载请注明出处 https://www.cnblogs.com/xinruyi 喜欢可以点击关注我
  • 相关阅读:
    sql server 跨IP库更新表字段(OPENDATASOURCE 、update)
    sql server 开启一个事务
    ARMv8 汇编指令集查询
    开源操作系统项目
    Cmake使用教程交叉编译
    开源机器人项目
    网络通信协议之粘包问题
    开源图像处理计算机视觉
    开源机器学习项目
    C语言中的回调函数
  • 原文地址:https://www.cnblogs.com/xinruyi/p/9389759.html
Copyright © 2020-2023  润新知