2021-12-05  2021-12-05    1707 字   4 分钟

AJAX

一 ajax

1. 理解

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

2. 作用

	异步请求服务器 不重新加载整个页面的情况下可以与服务器交换数据并更新部分网页内容提高效率
        
     同步发送一次请求如果响应才能发送下次请求如果没有响应一直等待其他的请求发送不了
        
     异步发送一次请求不需要等待 可以发送下一次请求

3. 使用

 创建核心对象
 设置请求配置信息(请求方式请求地址等)
 设置监听(响应成功的情况下)
 局部更新页面(dom操作)
// 3.1 创建核心对象
var xmlhttp;
if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

// 3.2 设置请求信息
xmlhttp.open("GET", "checkName?username="+username, true);
xmlhttp.send();

// 3.3 设置监听 成功
xmlhttp.onreadystatechange = function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        // 3.4 局部更新页面 dom操作
        document.getElementById("sp").innerHTML = xmlhttp.responseText;
    }
}

4. jQuery的ajax

方式1$.ajax()
     $.ajax({
         url: "checkName",  // 请求地址
         data: {"username":username },  // 请求携带参数
         type: "POST",    // 请求方式
         async: "true",  // 是否异步
         dataType: "text", // 获取数据的类型
         success: function(rel){  // 请求成功响应就绪
             // dom操作更新页面数据
             $("#sp").html(rel);
         }
     })
    
方式2$.get()/$.post()
    /* $.get("checkName?username="+username, function(rel){
                    // dom操作更新页面
                    $("#sp").html(rel);
                }, "text")*/
    $.post("checkName",{"username":username}, function(rel){
        // dom操作更新页面
        $("#sp").html(rel);
    }, "text")

5. 返回值类型

xml    以前使用 解析麻烦  json替代了
html   html标签和内容 返回页面数据
script  js脚本
json   处理大量数据使用的数据类型
text  文本 少量数据使用该类型

二、XML

1. 理解
     XML 指可扩展标记语言eXtensible Markup Language)。
	XML 被设计用来传输和存储数据现在一般做配置文件
	XML 很重要也很容易学习
2. 作用
    设计用来传输和存储数据现在一般做配置文件 web.xml
    
3. 约束由于xml数据标签没有定义 为了指定标准 提供了约束方式
    简单约束 : DTD文档类型定义的作用是定义 XML 文档的合法构建模块
          
        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE note[
                <!ELEMENT note (p+, to? ,xx*)>
                <!ELEMENT p (#PCDATA)>
                <!ELEMENT to (#PCDATA)>
                <!ELEMENT xx (#PCDATA)>
        ]>
        <note>
            <p>safas</p>
            <p>ccc</p>
            <to>asfsd</to>
            <xx>100</xx>
            <xx>sdff</xx>
        </note>
                  
    复杂约束Schema
        XML Schema 是基于 XML  DTD 替代者
	   XML Schema 可描述 XML 文档的结构
	   XML Schema 语言也可作为 XSDXML Schema Definition来引用

三、JSON

1. 理解
     JSON: JavaScript Object Notation(JavaScript 对象表示法)
	JSON 是存储和交换文本信息的语法类似 XML
	JSON  XML 更小更快更易解析
         
 2. 作用 
	网路传输数据的格式
 3. json数据 特点键值对的形式
         [{"id":1001, "name": "小航航", "qianGirl":[{"name":"翠花"}, {"name":"柳岩"}]},
  {"id":1002, "name":"小宫宫", "qianGirl":[{"name":"小翠"},{"name":"小苍苍"}]},
  {"id":1003, "name":"小明明", "qianGirl":[{"name":"小云云"},{"name": "小远远"}]}]

四、搜索补全

baidu.jsp中
    
    <%--
  Created by IntelliJ IDEA.
  User: junguang
  Date: 2021/12/14
  Time: 15:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>百度搜索</title>
    <style>
        *{
            padding: 0px;
            margin: 0px;
        }
        #dd input{
            width: 500px;
            height: 40px;
            border-top-left-radius: 10px;
            border-bottom-left-radius: 10px;
            border-color: #c3c3c3;
            padding-left: 20px;
            border-right: none;
            margin-top: 0px;
            margin-left: 450px;
            float: left;
        }
        #dd a{
            text-decoration: none;
            display: inline-block;
            width: 80px;
            height: 40px;
            background-color: blue;
            color: white;
            line-height: 40px;
            border-bottom-right-radius: 10px;
            border-top-right-radius: 10px;
            float: left;
        }
        #show{
            width: 500px;
            border: 1px solid #c3c3c3;
            float: left;
            margin-left: 450px;
            border-radius: 10px;
            display: none;
        }
        #show div{
            text-align: left;
            padding-left: 20px;
        }
    </style>
    <script src="js/jquery-3.5.1.min.js"></script>
    <script>
        $(function(){
            // 1. input绑定 键盘抬起事件
            $("#dd input").keyup(function(){

                // 清除show中的内容
                $("#show").empty();
                $("#show").css("display","none");


                // 2. 获取搜索框内容
                var v = $(this).val().trim();
                if(v==null || ""==v){
                    return;
                }
                // 3. 发送ajax请求 关联数据
                $.post("baidu", {"search":v}, function(rel){
                    // dom根据局部页面  show div中
                    for(var i=0; i< rel.length; i++){
                        console.log(rel[i].username);
                        // 将获取的数据 装入show
                        $("#show").css("display","block");
                        $("#show").append("<div>"+rel[i].username+"</div>");

                    }
                }, "json")
            });
        })
    </script>
</head>
<body>
    <center>
        <img src="img/baidu.png" width="200" height="95">
        <div id="dd">
            <input type="text" name="search" /><a href="#">百度一下</a>
        </div>
        <div id="show">

        </div>
    </center>
</body>
</html>
BaiduServlet
    package com.ujiuye.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.ujiuye.bean.User;
import com.ujiuye.service.UserService;
import com.ujiuye.service.impl.UserServiceImpl;

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.util.List;

@WebServlet(name = "BaiduServlet", urlPatterns = "/baidu")
public class BaiduServlet 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 {
        // 1. 获取请求参数
        String search = request.getParameter("search");

        // 2. 处理业务 根据搜索关联数据
        UserService service = new UserServiceImpl();
        List<User> list = service.findBySearch(search);

        // 转换json格式数据  (gson 功能比较全  fastjson 性能高) jackson
        // 2.1 获取核心对象
        ObjectMapper mapper = new ObjectMapper();

        String json = mapper.writeValueAsString(list);

        // 3. 响应
        response.getWriter().print(json);

    }
}

avatar
青山
悟已往之不谏 知来者之可追
一言
今日诗词
站点信息
本站访客数 :
本站总访问量 :