【AJAX】入门AJAX

news2025/2/1 22:54:44

入门AJAX

  • AJAX概述
  • AJAX的使用
    • XMLHttpRequest
      • 创建XMLHttpRequest对象
      • XMLHttpRequest对象的常用方法
      • XMLHttpRequest对象的常用属性
  • 使用AJAX POST请求实现‘判断用户名’案例
    • 实现步骤
    • 模拟数据库表单
    • 前端代码
    • 后端程序
    • 效果展示

AJAX概述

什么是AJAX?

AJAX全称(Asynchoronous JavaScript And XML)异步JavaScriptXML
在没学AJAX之前,向服务器发送请求,响应后在浏览器渲染页面上,即使是只要更新一点局部页面,也会将整个页面刷新;
不使用AJAX的缺点:

  1. 性能会有所下降;
  2. 用户的操作会中断,整个页面会刷新(就是说在页面未刷新之前无法进行其他操作,影响用户体验)。
    使用AJAX就可以使得不刷新整个页面的情况下,与服务器进行异步通信。

AJAX作用

  1. AJAX就是可以做到局部刷新!!!
  2. 可以减轻服务器负担。

在这里插入图片描述

AJAX是一种工具,是以下技术的结合:

  • (1)XHTML和CSS的基于标准的表示技术
  • (2)DOM进行动态显示和交互
  • (3)XML和XSLT进行数据交换和处理
  • (4)XMLHttpRequest进行异步数据检索
  • (5)Javascript将以上技术融合在一起

AJAX的使用

  • 传统的web前后端交互中,是浏览器直接访问Tomcat服务器中的Servlet来获取数据,Servlet通过转发数据发送给浏览器,然后浏览器渲染。
  • 当使用AJAX之后,浏览器是先把请求发送到XMLHttpRequest异步对象之中,异步对象对请求进行封装,然后再发送给服务器。服务器并不是以转发的方式响应,而是以流的方式把数据返回给浏览器,XMLHttpRequest异步对象会不停监听服务器状态的变化,得到服务器返回的数据,就写到浏览器上【因为不是转发的方式,所以是无刷新就能够获取服务器端的数据】

注意:使用AJAX编写的是前端代码,而不是后端代码。

在这里插入图片描述

XMLHttpRequest

创建XMLHttpRequest对象

<script type="text/javascript">
	window.onload = function(){
	var xml = new XMLHttpRequest()
}
</script>

XMLHttpRequest对象的常用方法

  1. open(String method,String url,boolean asynchor,String username,String password)

该方法用于打开连接服务器端的通道,创建http请求。
method参数是指请求的提交方式(get,post...);
url参数是指提交的路径;
asynchor参数是指是否选择异步;
username和password参数是可选参数,用于用户认证。

  1. send()

发送get请求给服务器,这是由于url路径的组件(参数param,查询query,片段frag组件)是在请求行上的,可以直接在open参数url中进行写入。

  1. send(String content)

发送post请求给服务器。这里会把content放入请求体中发送给服务器。

  1. setRequestHeader(String header,String value)

用于设置消息头。让请求以form表单的形式呈现,使得可以在后端读取到数据。仅在以post形式提交时才用的上。

代码固定如下:

setRequestHeader("Content-type","application/x-www-form-urlencoded");

注意:设置消息头要在开启通道之后,发送请求之前。

XMLHttpRequest对象的常用属性

  1. readState

该属性是请求状态的显示。一共有五大状态:

  1. 0状态AJAX异步对象已经创建好了,但是还没打开通道。
  2. 1状态open方法已被调用,还没发送请求。
  3. 2状态send方法已经被调用,但是还没有到达服务器。
  4. 3状态:请求已经到达服务器,正在响应的过程中。
  5. 4状态AJAX异步对象已经接受到了响应的数据。

在这里插入图片描述

  1. onreadstatechage

该属性是指请求状态readState改变了的事件触发器,通常会指定一个回调函数用于执行事件过程。
该事件过程就是接受服务器响应的内容。

  1. responseText

服务器返回的文本内容.

  1. responseXML

服务器返回的兼容DOM的XML内容。

  1. status

服务器返回的状态码(404,405,500,200…)

在这里插入图片描述

使用AJAX POST请求实现‘判断用户名’案例

实现步骤

  1. 在前端:用户名输入用户名之后,失去表单焦点事件blur发生,然后发送AJAX POST请求,提交用户名;
  2. 在后端:接受到用户名,连接数据库,根据用户名在表单中搜索;
  3. 判断:
    如果用户名已经存在:后端效应消息:sorry,用户名已存在(以红色字体呈现)
    如果用户名不存在:可以响应一个勾(这里响应用户名可以使用,以绿色字体呈现)

在这里插入图片描述

模拟数据库表单

下面是已创建的t_user表,里面有两个数据:

在这里插入图片描述

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AJAX POST请求验证用户名是否可用</title>
</head>
<body>

<script type="text/javascript">
  window.onload = function(){
      var xhr = new XMLHttpRequest()
    document.getElementById("username").onblur = function(){
      xhr.onreadystatechange = function(){
        if(this.readyState==4){
          if(this.status==200){
            var myspan = document.getElementById("myspan")
              myspan.innerHTML = this.responseText

          }else{
            alert(this.status)
          }
        }
      }
      xhr.open("POST","/ajax/ajax3",true)

      xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
      var username = document.getElementById("username").value

      xhr.send("username="+username)
    }
    document.getElementById("username").onfocus = function(){

        document.getElementById("myspan").innerText = ""
    }
  }
</script>

用户名:<input type="text" id="username" name="username"/>
<span id="myspan"></span>

</body>
</html>

后端程序

package javaweb.ajaxstudy;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

/**
 * 验证用户名是否可用
 */
@WebServlet("/ajax3")
public class AjaxRequest3Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String username = request.getParameter("username");

        // 下面写JDBC代码
        boolean flag = false;//用于判断用户名是否存在
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu","root","myz031119");
            String sql = "select * from t_user where name=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,username);
            rs = ps.executeQuery();
            if(rs.next()){
                flag = true;
            }
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        if(username!="") {
            if (flag) {
                out.print("<font color='red'>Sorry,用户名已存在</font>");
            } else {
                out.print("<font color='green'>用户名可以使用</font>");
            }
        }

    }
}

效果展示

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊如何利用redis实现多级缓存同步

前言 前阵子参加业务部门的技术方案评审&#xff0c;故事的背景是这样&#xff1a;业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图 按理来说这个系统因为受众很小&#xff0c;可以说基本上没并发&#xff0c;业务也没很复杂&#xff0c;但就是这么一个系…

【Java】做了个 Java 简洁版身材计算

前言 &#xff08;当前文章仅说明做了这个 身材计算 简洁版。&#xff09; 为了参加比赛 码上掘金编程后端挑战赛 (juejin.cn)… 我选择了做一个简洁版的身材计算… 效果展示 code - juejin 地址&#xff1a;身材计算&#xff08;Java版&#xff09; - 码上掘金 完整代码 …

RK3568平台开发系列讲解(环境篇)kernel编译及打包

🚀返回专栏总目录 文章目录 一、编译步骤二、编译脚本沉淀、分享、成长,让自己和他人都能有所收获!😄 📢此方法常用于 kernel 的开发和调试,以下的方法既编译 kernel 部分时, 同时打包成 boot.img, 这样加快了我们开发的速度; 一、编译步骤 进入内核目录下, 输入…

进阶中级前端必备知识点

1、从输入url到页面显示出来发生了什么 1.DNS解析 2.TCP连接 3.发送HTTP请求 4.服务器处理请求并返回需要的数据 5.浏览器解析渲染页面 解析HTML&#xff0c;生成DOM树&#xff0c;解析CSS&#xff0c;生成CSSOM树 将DOM树和CSSOM树结合&#xff0c;生成渲染树(Render T…

智能无障碍轮椅——DX-BT05 4.0蓝牙模块

文章目录常用的蓝牙模块有哪几种&#xff1f;蓝牙的透传蓝牙的运行模式开发方式AT指令集开发方式AT指令集BT-05调试硬件图DX-BT05 4.0蓝牙模块介绍连接步骤&#xff1a;常用的几个AT指令主模式的AT指令常用的蓝牙模块有哪几种&#xff1f; 蓝牙主要有HC-05、HC-06、BT-04、BT-…

SpringBoot整合mybatis实现增删改查、分页查询

前提&#xff1a; 先搭建出最基本的SpringBoot项目 SpringBoot框架快速入门搭建Hello World&#xff0c;请点击下面链接&#xff1a;https://blog.csdn.net/KangYouWei6/article/details/127018638 一、建立数据库 /*Navicat Premium Data TransferSource Server : 本地…

搜狗SEO优化技巧,搜狗收录批量查询技巧

搜狗SEO优化技巧 首先要知道搜索引擎的搜索原理&#xff0c;简而言之就是蜘蛛怎么爬取你的新网站&#xff0c;一般新的企业网站蜘蛛采取的是横向抓取&#xff0c;先收录首页&#xff0c;然后栏目页、子网页&#xff0c;这样一级一级的往下走&#xff0c;建网站用com域名。新…

设计测试用例的方法

设计测试用例的方法有很多&#xff0c;等价类划分法是重点&#xff0c;边界值分析法次之&#xff0c;对于因果图法知道概念就行&#xff0c;老师说考试不会考&#xff0c;但是历年考试中貌似考过一次&#xff0c;这就不知道了&#xff0c;反正考试大题基本课本例题&#xff0c;…

(十八)Vue之生命周期

文章目录引出生命周期外部的定时器实现生命周期实现生命周期详解挂载流程更新流程销毁流程总结Vue学习目录 上一篇&#xff1a;&#xff08;十七&#xff09;Vue之自定义指令 引出生命周期 先看一个需求&#xff1a;一上来就让一段文字的透明度循环从1-0-1的过程&#xff0c…

Fabric.js 文本自动换行的实现方式

本文简介 点赞 关注 收藏 学会了 在 fabric.js 提供的文本组件中&#xff0c;默认状态是不会自动换行。如果你的使用场景中需要自动文本自动换行&#xff0c;可以使用 Textbox &#xff0c;并将 splitByGrapheme 设置为 true 即可。 文本自动换行 如果需要实现本文自动换行…

盘点:保护企业数据安全的10种方法

即便是大型企业也无法防止网络攻击导致的数据泄露&#xff0c;但有多种保护数据安全的方法。 许多公司谨慎处理敏感信息&#xff0c;包括客户个人信息、企业财务记录和账户&#xff0c;以及企业暂时不想泄露的绝密项目&#xff0c;保持数据的安全至关重要。 全球知名企业发生了…

Java(十五)----Stream流

1 Stream流 1.1 Stream流的优势 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提…

11 深入了解InnoDB引擎

1. Innodb逻辑存储结构 表空间&#xff1a;ibd文件段segment&#xff1a;区extent&#xff1a;一个区大小为1m&#xff0c;里面有64个page页&#xff1b;为了保证页的连续性innodb会一次从磁盘申请4-5个区页page&#xff1a;一个page页大小为默认为16k行row&#xff1a;Trx id、…

深入探究Python上下文管理器

引子 上下文管理器是一种简化代码的有力方式&#xff0c;其内部也蕴含了很多Python的编程思想&#xff0c;今天我们就来探究一下Python的上下文管理器。 大家之前都知道&#xff0c;使用Python打开文件的时候最好要使用with语句&#xff0c;因为这样就算在文件操作中出现了异常…

基于java的校园共享自行车系统的设计与实现/校园共享单车管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…

React扩展:setState、lazyLoad、hook

目录 1.setState的两种写法 ①setState(对象,[callback])②setState(函数,[callback])函数可以接收到stata和props&#xff0c;callback回调函数能获取状态更新后的数据 写了个Demo组件 import React, { Component } from reactexport default class Demo extends Component…

万岳直播电商系统源码代码分析

以小编经验来看&#xff0c;传统商户领域的客流量受地区的限制&#xff0c;往往比较单一、固定&#xff0c;商家需压耗费大量的时间进行打造IP&#xff0c;而电商直播系统的出现则完全打破了这一规则&#xff0c;商家可以通过直播的形式&#xff0c;轻松获取源源不断的客流量&a…

网络中的一些基本概念(总结)

目录 1.IP地址 2.端口号 3.协议 4.五元组 5.协议分层 1.OSI七层模型 2.TCP/IP五层(四层)模型 6.网络分层对应 7.封装 8.分用 9.客户端和服务器 1.IP地址 IP地址是用来定位主机的网络地址,主要用于标识主机和一些其他的网络设备,比如路由器通常是用点分十进制来表示的]…

节律失调:Theta-Gamma耦合精度改变损害老年人的联想记忆

根据著名的神经通信理论&#xff0c;振荡活动的精确协调能够形成联想记忆。我们认为&#xff0c;正常的认知老化会损害神经通信的时间精确性&#xff0c;从而损害联想记忆的形成。我们发现&#xff0c;在年轻人和老年人中都存在高频gamma功率与低频theta相位的耦合支持联想记忆…

地下水监测系统介绍 地下水水位在线监测系统解决方案及应用

平升电子地下水监测系统/地下水水位在线监测系统解决方案由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和…