AJAX

Posted xue_yun_xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX相关的知识,希望对你有一定的参考价值。

一、概述

AJAX = Asynchronous异步 javascript and XML。四个单词首字母
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过异步加载的形式请求数据,局部刷新界面
异步请求,局部刷新

二、get请求

GetEmpByIdServlet.java

package com.qfedu.servlet;

import com.alibaba.fastjson.JSON;
import com.qfedu.entity.Emp;

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 xue_yun_xiang
 * @create 2021-05-04-12:55
 */
@WebServlet("/GetEmpByIdServlet")
public class GetEmpByIdServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //标记返回json
        resp.setContentType("text/json;charset=utf-8");

        String idStr = req.getParameter("id");


        Emp emp = new Emp(1,"xiaoming",12,"F",3000);


        // 返回前端json 数据   ajax 接收数据
        resp.getWriter().write(JSON.toJSONString(emp));

    }

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

get.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
id:<input type="number" name="id" id="id">
<button onclick="getEmpById()">获取emp</button>

<p id="content"></p>
<script>

    //根据id查询emp
    function getEmpById() {


        // 创建一个链接/客户端   作用:发起http请求
        var  xMLHttpRequest  =   new XMLHttpRequest();

        // 配置 xMLHttpRequest 回调函数
        //只要xMLHttpRequest 的状态(发送数据,接收数据,创建连接) 发生变化都会 回调
        //onreadystatechange监听状态
        xMLHttpRequest.onreadystatechange = function(){
            //readyState 转态
            // 0 请求未初始化
            // 1 请求建立链接
            // 2 请求已接受
            // 3 请求处理中
            // 4 请求处理完成  后端响应完成
            // xmlhttp.status  200 请求成功  404找不到界面
            if (xMLHttpRequest.readyState==4 && xMLHttpRequest.status==200 ){

                //获取后端响应数据
                alert(xMLHttpRequest.responseText);
                //将获取的数据局部刷新 到 前端界面
                document.getElementById("content").innerText=xMLHttpRequest.responseText;
            }

        }

        //获取id 为 id的输入值
        var id = document.getElementById("id").valueOf().value;
        // 第一个参数 请求方式
        // 第二个参数 请求路径
        // 第三个参数是否异步 true
        xMLHttpRequest.open("get","/GetEmpByIdServlet?id=" + id,true);

        // 发起请求
        xMLHttpRequest.send();
    }
</script>
</body>
</html>

三、post请求

GetEmpByIdServlet.java

package com.qfedu.servlet;

import com.alibaba.fastjson.JSON;
import com.qfedu.entity.Emp;

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 xue_yun_xiang
 * @create 2021-05-04-12:55
 */
@WebServlet("/GetEmpByIdServlet")
public class GetEmpByIdServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //标记返回json
        resp.setContentType("text/json;charset=utf-8");

        String idStr = req.getParameter("id");


        Emp emp = new Emp(1,"xiaoming",12,"F",3000);


        // 返回前端json 数据   ajax 接收数据
        resp.getWriter().write(JSON.toJSONString(emp));

    }

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

post.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
id:<input type="number" name="id" id="id">
<button onclick="getEmpById()">获取emp</button>

<p id="content"></p>
<script>

    //根据id查询emp
    function getEmpById() {


        // 创建一个链接/客户端   作用:发起http请求
        var  xMLHttpRequest  =   new XMLHttpRequest();

        // 配置 xMLHttpRequest 回调函数
        //只要xMLHttpRequest 的状态(发送数据,接收数据,创建连接) 发生变化都会 回调
        //onreadystatechange监听状态
        xMLHttpRequest.onreadystatechange = function(){
            //readyState 转态
            // 0 请求未初始化
            // 1 请求建立链接
            // 2 请求已接受
            // 3 请求处理中
            // 4 请求处理完成  后端响应完成
            // xmlhttp.status  200 请求成功  404找不到界面
            if (xMLHttpRequest.readyState==4 && xMLHttpRequest.status==200 ){

                //获取后端响应数据
                alert(xMLHttpRequest.responseText);
                //将获取的数据局部刷新 到 前端界面
                document.getElementById("content").innerText=xMLHttpRequest.responseText;
            }

        }

        //获取id 为 id的输入值
        var id = document.getElementById("id").valueOf().value;
        // 第一个参数 请求方式
        // 第二个参数 请求路径
        // 第三个参数是否异步 true

        //第一种:携带数据是在url中
       // xMLHttpRequest.open("post","/GetEmpByIdServlet?id=" + id,true);

        // 发起请求
        //xMLHttpRequest.send();

        xMLHttpRequest.open('post','/GetEmpByIdServlet',true);


        //注意:设置格式要放在打开链接的下面
        //设置xML的请求方式为post,将数据放到body中,必须设置header
        //对body进行编码
        xMLHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        //第二种:安全
        //ajax以body形式发送请求
        xMLHttpRequest.send('id=' + id);
    }
</script>
</body>
</html>

以上是关于AJAX的主要内容,如果未能解决你的问题,请参考以下文章

Javascript代码片段在drupal中不起作用

前端面试题之手写promise

Ajax 片段元标记 - Googlebot 未读取页面内容

执行AJAX返回HTML片段中的JavaScript脚本

javascript AJAX片段

Spring MVC 3.2 Thymeleaf Ajax 片段