zoukankan      html  css  js  c++  java
  • 13Ajax和JQuery

    1.Ajax

    1.1是什么?

    “Asynchronous Javascript And XML”(异步JavaScript和XML),

    并不是新的技术,只是把原有的技术,整合到一起而已。

    1.使用CSS和XHTML来表示。
    2. 使用DOM模型来交互和动态显示。
    3.使用XMLHttpRequest来和服务器进行异步通信。
    4.使用javascript来绑定和调用。

    1.2有什么用?

    咱们的网页如果想要刷新局部内容。 那么需要重新载入整个网页。用户体验不是很好。 就是为了解决局部刷新的问题。 保持其他部分不动,只刷新某些地方。

    1.3数据请求 Get

    1)创建对象

    function ajaxFunction() {
            var xmlHttp;
            try { // Firefox, Opera 8.0+, Safari
                xmlHttp = new XMLHttpRequest();
            } catch (e) {
                try { // Internet Explorer
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            return xmlHttp;
        }

    2)发送请求

    //执行get请求
        function get() {
            //1. 创建xmlhttprequest 对象
            var request = ajaxFunction();
    
            //2. 发送请求。
            /*    
                        参数一: 请求类型  GET or  POST
                        参数二: 请求的路径
                        参数三: 是否异步, true  or false
                        
                    */
            request.open("GET", "/day13Ajax/DemoServlet01", true);
            request.send();
        }

    如果发送请求的同时,还想获取数据,那么代码如下

    //执行get请求
        function get() {
            //1. 创建xmlhttprequest 对象
            var request = ajaxFunction();
    
            //2. 发送请求。
            /*    
                        参数一: 请求类型  GET or  POST
                        参数二: 请求的路径
                        参数三: 是否异步, true  or false
                        
                    */
            //request.open("GET", "/day13Ajax/DemoServlet01", true);
            request.open("GET", "/day13Ajax/DemoServlet01?name=aa&age=18", true);
            
            //3. 获取响应数据 注册监听的意思。  一会准备的状态发生了改变,那么就执行 = 号右边的方法
            request.onreadystatechange = function(){
                
                //前半段表示 已经能够正常处理。  再判断状态码是否是200
                if(request.readyState == 4 && request.status == 200){
                    //弹出响应的信息
                    alert(request.responseText);
                }
            }
            request.send();

    1.4数据请求 Post

    package cn.jxufe.web;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class DemoServlet01 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("收到了一个请求。。。");
            String name = request.getParameter("name");
            String age = request.getParameter("age");
            System.out.println("收到了一个请求。。。" + name + "=" + age);
    
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("收到了请求...");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("现在来了一个post请求,将要去走get的代码了。");
            doGet(request, response);
        }
    
    }

    如果不带数据

    function ajaxFunction() {
            var xmlHttp;
            try { // Firefox, Opera 8.0+, Safari
                xmlHttp = new XMLHttpRequest();
            } catch (e) {
                try { // Internet Explorer
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            return xmlHttp;
        }
        //执行get请求
        function post() {
            //1. 创建xmlhttprequest 对象
            var request = ajaxFunction();
    
            //2. 发送请求。
            /*    
                        参数一: 请求类型  GET or  POST
                        参数二: 请求的路径
                        参数三: 是否异步, true  or false
                        
                    */
            request.open("POST", "/day13Ajax/DemoServlet01", true);
            request.send();
        }

    带数据

        function ajaxFunction() {
            var xmlHttp;
            try { // Firefox, Opera 8.0+, Safari
                xmlHttp = new XMLHttpRequest();
            } catch (e) {
                try { // Internet Explorer
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
    
            return xmlHttp;
        }
        //执行get请求
        function post() {
            //1. 创建xmlhttprequest 对象
            var request = ajaxFunction();
    
            //2. 发送请求。
            /*    
                        参数一: 请求类型  GET or  POST
                        参数二: 请求的路径
                        参数三: 是否异步, true  or false
                        
                    */
            request.open("POST", "/day13Ajax/DemoServlet01", true);
    
            //如果想带数据,就写下面的两行
    
            //如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
            request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    
            //带数据过去  , 在send方法里面写表单数据。 
            request.send("name=obama&age=19");
        }

    //执行get请求
        function post() {
            //1. 创建xmlhttprequest 对象
            var request = ajaxFunction();
    
            //2. 发送请求。
            /*    
                        参数一: 请求类型  GET or  POST
                        参数二: 请求的路径
                        参数三: 是否异步, true  or false
                        
                    */
            request.open("POST", "/day13Ajax/DemoServlet01", true);
    
            //3. 获取响应数据 注册监听的意思。  一会准备的状态发生了改变,那么就执行 = 号右边的方法
            request.onreadystatechange = function() {
    
                //前半段表示 已经能够正常处理。  再判断状态码是否是200
                if (request.readyState == 4 && request.status == 200) {
                    //弹出响应的信息
                    alert(request.responseText);
                }
            }
    
            //如果想带数据,就写下面的两行
    
            //如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
            request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    
            //带数据过去  , 在send方法里面写表单数据。 
            request.send("name=obama&age=19");
    
        }

    2.JQuery

    2.1是什么?

    javascript 的代码框架。

    2.2有什么用?

    简化代码,提高效率。

    2.3核心 

    write less do more , 写得更少,做的更多。

    2.4load()方法

    package cn.jxufe.web;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class DemoServlet02 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("收到了请求。。。");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("给你一份数据");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP '01demo.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    
    <script type="text/javascript">
        function load() {
    
            //$("#aaa").val("aaa");
            //$("#aaa").html("9999999");
    
            //$("#aaa").load("/day16/DemoServlet02");
    
            //$("#text01") --- document.getElementById("text01");
            $("#aaa").load("/day13Ajax/DemoServlet02", function(responseText, statusTXT, xhr) {
                //alert("jieguo:"+responseText);
                //找到id为text01的元素, 设置它的value属性值为 responseText 对应的值
                $("#aaa").val(responseText);
            });
        }
    </script>
    </head>
    
    <body>
        <!-- <h3><a href="" onclick="load()">使用JQuery执行load方法</a></h3>  -->
        <h3>
            <input type="button" onclick="load()" value="使用JQuery执行load方法">
        </h3>
    
        <input type="text" id="aaa">
    
    </body>
    </html>

    2.5get()方法

     

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP '01demo.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    
    <script type="text/javascript">
        //$.get(URL,callback);
        function get() {
            $.get("/day13Ajax/DemoServlet02", function(data, status) {
                //alert("结果是:" + data);
                //$("#div01")  -- document.getElementById("div01");
    
                //$("#div01").val(); //val  用于设置 元素里面有values 的属性值 
                //$("#div01").html(data);
                //$("#div01").val(data);
                $("#div01").text("aaa=" + data);
            //$("#div01").html(data); // <font>
            });
        }
    </script>
    </head>
    
    <body>
    
        <input type="button" onclick="get()" value="使用JQuery演示 get方法">
    
        <div id="div01"
            style=" 100px ; height: 100px ; border: 1px solid blue; ">
    
        </div>
    
    </body>
    </html>

    * val("aa");

    > 只能放那些标签带有value属性
    * html("aa"); ---写html代码
    * text("aa");

    > 其实没有什么区别,如果想针对这分数据做html样式处理,那么只能用html()

    2.6POST()方法

     

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP '06demo.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    
    <script type="text/javascript">
        function post() {
            $.post("/day13Ajax/DemoServlet02", {
                name : "zhangsan",
                age : "18"
            }, function(data, status) {
                //想要放数据到div里面去。 --- 找到div
                $("#div01").html(data);
            });
        }
    </script>
    </head>
    
    <body>
    
        <input type="button" onclick="post()" value="使用JQuery演示 post方法">
    
        <div id="div01"
            style=" 100px ; height: 100px ; border: 1px solid blue; ">
    
        </div>
    
    </body>
    </html>

    2.7城市联动小案例

     1)准备数据库

     

    2) 准备页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="js/city02.js"></script>
    
    <!-- 引用的是 xml的处理方法 <script type="text/javascript" src="js/city.js"></script> -->
    </head>
    <body>
        省份:
        <select name="province" id="province">
            <option value="">-请选择 -
            <option value="1" >广东
            <option value="2" >湖南
            <option value="3" >湖北
            <option value="4" >四川
        </select>
    城市: 
        <select name="city" id="city">
            <option value="" >-请选择 -
        </select>
    </body>
    </html>

    3)创建javabean

    package cn.jxufe.entity;
    
    public class CityBean {
        private int id ;
        private int pid;
        String cname;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getPid() {
            return pid;
        }
        public void setPid(int pid) {
            this.pid = pid;
        }
        public String getCname() {
            return cname;
        }
        public void setCname(String cname) {
            this.cname = cname;
        }
        
    }

    4)创建dom接口及实现类

    package cn.jxufe.dao;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import cn.jxufe.entity.CityBean;
    
    public interface CityDao {
        List<CityBean> findCity(int pid) throws SQLException ;
    }
    package cn.jxufe.dao.impl;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    
    import cn.jxufe.dao.CityDao;
    import cn.jxufe.entity.CityBean;
    import cn.jxufe.util.JDBCUtil02;
    
    public class CityDaoImpl implements CityDao{
        @Override
        public List<CityBean> findCity(int pid) throws SQLException {
            // TODO Auto-generated method stub
            QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
            String sql = "select * from city where pid = ?";
            return runner.query(sql, new BeanListHandler<CityBean>(CityBean.class) , pid);
            
        }
    }

    5)创建servlet

    #1 以xml的形式返回数据

    package cn.jxufe.web;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.thoughtworks.xstream.XStream;
    
    import cn.jxufe.dao.CityDao;
    import cn.jxufe.dao.impl.CityDaoImpl;
    import cn.jxufe.entity.CityBean;
    
    public class CityServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                // 1. 获取参数
                int pid = Integer.parseInt(request.getParameter("pid"));
    
                // 2 找出所有的城市
                CityDao dao = new CityDaoImpl();
                List<CityBean> list = dao.findCity(pid);
    
                // 3. 返回数据。手动拼 ---> XStream 转化 bean对象成 xml
                XStream xStream = new XStream();
    
                // 想把id做成属性
                // xStream.useAttributeFor(CityBean.class, "id");
                // 设置别名
                xStream.alias("city", CityBean.class);
                // 转化一个对象成xml字符串
                String xml = xStream.toXML(list);
    
    //            // 返回数据
                response.setContentType("text/xml;charset=utf-8");
                response.getWriter().write(xml);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    #02以json的形式返回数据

    package cn.jxufe.web;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.thoughtworks.xstream.XStream;
    
    import cn.jxufe.dao.CityDao;
    import cn.jxufe.dao.impl.CityDaoImpl;
    import cn.jxufe.entity.CityBean;
    import net.sf.json.JSONArray;
    
    public class CityServlet02 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                // 1. 获取参数
                int pid = Integer.parseInt(request.getParameter("pid"));
    
                // 2 找出所有的城市
                CityDao dao = new CityDaoImpl();
                List<CityBean> list = dao.findCity(pid);
    
                // 3. 把list ---> json数据
                // JSONArray ---> 变成数组 , 集合 []
                // JSONObject ---> 变成简单的数据 { name : zhangsan , age:18}
    
                JSONArray jsonArray = JSONArray.fromObject(list);
                String json = jsonArray.toString();
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write(json);
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

     6)JSP

    #1

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="js/city.js"></script>
    
    <!-- 引用的是 xml的处理方法 <script type="text/javascript" src="js/city.js"></script> -->
    </head>
    <body>
        省份:
        <select name="province" id="province">
            <option value="">-请选择 -
            <option value="1" >广东
            <option value="2" >湖南
            <option value="3" >湖北
            <option value="4" >四川
        </select>
    城市: 
        <select name="city" id="city">
            <option value="" >-请选择 -
        </select>
    </body>
    </html>

    #2

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="js/city02.js"></script>
    
    </head>
    <body>
        省份:
        <select name="province" id="province">
            <option value="">-请选择 -
            <option value="1" >广东
            <option value="2" >湖南
            <option value="3" >湖北
            <option value="4" >四川
        </select>
    城市: 
        <select name="city" id="city">
            <option value="" >-请选择 -
        </select>
    </body>
    </html>

    7)js

    #1

    $(function() {
        //1。找到省份的元素
        $("#province").change(function() {
            //2. 一旦里面的值发生了改变,那么就去请求该省份的城市数据
            //$("#province").varl();
            var pid = $(this).val();
            
            /*[
                {
                    "cname": "深圳",
                    "id": 1,
                    "pid": 1
                },
                {
                    "cname": "东莞",
                    "id": 2,
                    "pid": 1
                }
                ...
            ]*/
            $.post( "CityServlet02",{pid:pid} ,function(data,status){
                
                //先清空
                $("#city").html("<option value='' >-请选择-");
                //再遍历,追加
                $(data).each(function(index , c) {
                    $("#city").append("<option value='"+c.id+"' >"+c.cname)
                });
            },"json" );
            
        });
    });

    #2

    $(function() {
        //1。找到省份的元素
        $("#province").change(function() {
            //2. 一旦里面的值发生了改变,那么就去请求该省份的城市数据
            //$("#province").varl();
            var pid = $(this).val();
            
            /*[
                {
                    "cname": "深圳",
                    "id": 1,
                    "pid": 1
                },
                {
                    "cname": "东莞",
                    "id": 2,
                    "pid": 1
                }
                ...
            ]*/
            $.post( "CityServlet02",{pid:pid} ,function(data,status){
                
                //先清空
                $("#city").html("<option value='' >-请选择-");
                //再遍历,追加
                $(data).each(function(index , c) {
                    $("#city").append("<option value='"+c.id+"' >"+c.cname)
                });
            },"json" );
            
        });
    });

  • 相关阅读:
    pl/sql 编程!
    oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。
    oracle 相关查询和非相关查询,oracle 去除重复数据,以及oracle的分页查询!
    初识 oracle!
    分页查询。
    利用ajax技术 实现用户注册。
    quartz CronExpression
    SQL 面试题
    什么是HTTP协议?常用的状态码有哪些?
    聚集索引与非聚集索引
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/11215896.html
Copyright © 2011-2022 走看看