Web基础 ( 六 ) AJAX

news2024/11/25 15:21:59

4.6.AJAX

4.6.1.什么是ajax

Ajax(Asynchronous JavaScript and XML , Asynchronous 异步的)指的是一种使用 JavaScript、XML 和 HTTP 请求进行前端数据异步交互的技术。Ajax 不需要刷新整个页面就可以更新其中的一部分,使得网页的反应更快、更灵活,用户体验更好。

通俗来说,Ajax 就是通过 JavaScript 发送 HTTP 请求到服务器,接收服务器的响应,并对网页内容进行更新,使得服务端和客户端之间不需要进行页面的完全刷新。

使用 Ajax 可以实现许多功能,如:

  1. 异步更新页面内容,来提高页面的动态性和响应速度,从而改善用户的使用体验。
  2. 通过动态获取数据,实现部分数据的更新,减少数据传输量,从而提高页面加载速度。
  3. 在不离开当前页面的情况下,提交表单并处理请求的响应结果。
  4. 实现在线自动检查和验证表单输入,避免提交错误的表单数据。

在 JavaScript 中使用 Ajax 技术通常需要通过 XMLHttpRequest (XHR)对象来完成,XHR 可以通过 JavaScript 代码向服务器发送请求和接收响应。也可以使用一些第三方库来简化 Ajax 请求,如 jQuery、fetch 等。

4.6.2.同步/异步

4.6.2.1.什么是同步请求?

同步请求是指当前发出请求后,浏览器什么都不能做,
必须得等到请求完成返回数据之后,才会执行后续的代码,
相当于生活中的排队,必须等待前一个人完成自己的事物,后一个人才能接着办。

在这里插入图片描述

4.6.2.1.什么是异步请求?

异步请求就当发出请求的同时,浏览器可以继续做任何事,
Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。
异步请求可以完全不影响用户的体验效果,
无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。

在这里插入图片描述

4.6.3.XMLHttpRequest

4.6.3.1.得到XMLHttpRequest对象

XMLHttpRequest 是JavaScript等脚本语言中使用的API,它通过HTTP协议异步向服务器发送请求,并获取服务器返回的响应。
最大的用处是提供与服务器异步通信的能力。

1999年上半年提出的。ie5.0首次使用的一个ActiveX对象,叫XMLHTTP。

2000年,Mozilla实现了相同接口的原生对象XMLHttpRequest。其它浏览器也相继实现了同样的对象。

var xhr;

function createXMLHttpRequest(){
    var xmlRequest;
	if(window.XMLHttpRequest){	    //Mozilla
		xmlRequest = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		try{
			xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");		
		}catch(e){
			try{
				xmlRequest = new ActiveXObject(Microsoft.XMLHTTP);
			}catch(e){
			}
		}
	}
	return  xmlRequest;
}

4.6.3.2.XMLHttpRequest 对象方法

abort() : 停止发送当前请求

getAllResponseHeaders() : 获取服务器返回的全部响应头

getResponseHeaders() : 根据响应头的名字,获取对应的响应头

setRequestHeader("label","value") : 在发送请求之前,设置请求头

//设置请求头
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

open(“method”,"URL",asyncFlag) : ( 核心方法 ) 建立与服务器URL的连接

method : 请求方式 get / post

url : 请求的资源URL

asyncFlag : true 异步请求 , false 非异步请求

send(content) : ( 核心方法 ) 发送请求 , 可以在括号中加入请求参数, 要通过 send() 传值 , open() 的method要设置成POST

// 无参数
xhr.send(null)
// 有参数
xhr.send("id=" + id + "&name=" + name);

4.6.3.3.XMLHttpRequest 对象属性

readyState : ( 核心属性 ) XHR对象的处理状态

0 XHR对象还没有完成初始化 尚未调用open()方法
1 XHR对象开始发送请求 已调用open()方法,但尚未调用send()方法
2 XHR对象的请求发送完成 已调用send()方法,但尚未接收到响应
3 XHR对象开始读取服务器的响应 已接收到部分响应数据
4 XHR对象读取服务器响应结束 已接收到全部响应数据,而且已经可以在客户端使用了

responseText : ( 核心属性 ) 文本形式的响应内容

responseXML : XML 形式的响应内容

status : ( 核心属性 ) 响应状态码

200 服务器响应正常

404 需要访问的资源不存在

500 服务器内部错误

statusText : 服务器返回的状态文本信息

4.6.3.4.XMLHttpRequest 对象事件

onreadystatechange : ( 核心事件 ) 用于指定XHR对象状态改变时的事件处理函数

ontimeout : IE8 支持 超时事件

load : firefox支持,只要接收到响应就处发的事件

porgress : 接到新数据j时触发

4.6.4.实例

4.6.4.1.页面 通过 send() 传参

<html>
<body>
<h1>hello ajax</h1>
<input onblur="ajaxTest(this)" value="ajax-test">
</body>
<script>
    var xhr;
    // 创建XHR对象
    function createXMLHttpRequest(){
        var xmlRequest;
        if(window.XMLHttpRequest){	    //Mozilla
            xmlRequest = new XMLHttpRequest();
        }else if(window.ActiveXObject){
            try{
                xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");		
            }catch(e){
                try{
                    xmlRequest = new ActiveXObject(Microsoft.XMLHTTP);
                }catch(e){
                }
            }
        }
        return  xmlRequest;
    }

    function ajaxTest(inp) {
        console.log(inp.value)
        // 得到XHR对象
        xhr = createXMLHttpRequest()
        var url = "/test";
        // 发请求
        xhr.open("POST", url)
        // 监听事件
        xhr.onreadystatechange = function () {
            if (xmlRequest.readyState == 4) {
                if (xmlRequest.status == 200) {
                    console.log( xmlRequest.responseText )
                }
            }
        }
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
        var data = 'data=' + inp.value;
        xhr.send(data);
    }
</script>
</html>

4.6.4.2.Controller接参

使用 @RequestParam("标识") 接参

使用 @ResponseBody 将默认 转页 转换成返回数据

package com.yuan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AjaxTestController {

    @RequestMapping("/test")
    @ResponseBody
    public String test( @RequestParam("data") String data){
        System.out.println("data = " + data);
        
        return "response msg";
    }
}

4.6.4.3.传对象(JSON)数据

修改 send() 传 对象 JSON结构 参数

xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
var params = { data: inp.value };
xhr.send(JSON.stringify(params));

4.6.4.4.Controller 接收对象

通过 @RequestBody 接 对象, 再使用 JSONObject 将字符串转对象


    @RequestMapping("/test")
    @ResponseBody
    public String test(@RequestBody String data){
        System.out.println("data = " + data); // data = {"data":"ajax-test"}
        JSONObject jsonObject = JSONObject.parseObject(data);
        String value = jsonObject.getString("data");
        System.out.println("value = " + value);

        return "response msg";
    }

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

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

相关文章

RabbitMQ学习-延迟队列

延迟队列 背&#xff1a;也就是给队列设置个过期时间&#xff0c;然后到时间消息变成死信&#xff0c;消费死信队列中的消息就行&#xff0c;再没什么玩意&#xff0c;演示队列优化就是不给队列这只TTL&#xff0c;再生产者代码中消息里面设置消息TTL&#xff0c;因为 RabbitM…

ElasticSearch——Docker安装ElasticSearch和Kibana

Docker安装ElasticSearch 说明&#xff1a;由于是用docker安装&#xff0c;所以要确保已安装docker并docker环境可用。 docker安装步骤&#xff1a;https://wanli.blog.csdn.net/article/details/121445768 1、Docker安装ElasticSearch 获取指定版本的ES镜像 拉取镜像&#…

Ubuntu安装RabbitMQ server - 在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章&#xff1a;无公网IP&…

nodejs+vue社区重点人员户籍信息查询系统

为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xff0c;重点人员信息查询就是信息时代变革中的产物之一。 任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要…

基于SSM的土家风景文化管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 前言…

JetBrains的C和C++集成开发环境CLion 2023版本在Win10系统的下载与安装配置教程

目录 前言一、CLion安装二、使用配置总结 前言 CLion是一款为C和C语言开发人员设计的集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署C和C应用程序。 CLion的主要特点&#xff1a; ——代码编辑器…

常见开源协议介绍

开源协议是指开放源代码软件的使用、修改和分发的规则。开源协议的出现&#xff0c;使得开发者可以在保护自己的知识产权的同时&#xff0c;也可以让其他人使用、修改和分发自己的代码。本文将介绍几种常见的开源协议。 一、GPL协议 GPL&#xff08;GNU General Public Licens…

哈希表(哈希函数和处理哈希冲突)_20230528

哈希表&#xff08;哈希函数和处理哈希冲突) 前言 关于哈希表的主题的小记原计划5月23日完成&#xff0c;由于本人新冠阳性&#xff0c;身体发烧乏力&#xff0c;周末感觉身体状况稍加恢复&#xff0c;赶紧打开电脑把本文完成&#xff0c;特别秉承“写是为了更好地思考&#…

搜索算法总结

文章目录 搜索算法1. 深度优先搜索&#xff08;Depth-First-Search, DFS&#xff09;2. 广度优先搜索&#xff08;Breadth-first search, BFS&#xff09;3. 启发式搜索策略3.1 爬山法&#xff08;Hill climbing&#xff09;3.2 最佳优先搜索&#xff08;Best-first search&…

【嵌入式环境下linux内核及驱动学习笔记-(13-中断管理)】

目录 1、中断基本概念2、ARM体系中断系统2.1 ARM具有的七种异常模式与中断的关系2.2 ARM多核环境下的中断2.3 exynos4412(contex A9)的中断 3、中断处理程序架构4、 中断接口编程4.1 中断接口函数4.1.1 request_irq4.1.2 free_irq4.1.3 irqreturn_t4.1.4 irq_handler_t 中断处理…

C语言初阶之函数介绍及练习

函数介绍及练习 1.函数是什么&#xff1f;2.C语言中函数的分类&#xff1a;2.1 库函数2.2 自定义函数 3. 函数的参数3.1 实际参数&#xff08;实参&#xff09;&#xff1a;3.2 形式参数&#xff08;形参&#xff09;&#xff1a; 4.函数的调用4.1 传值调用4.2 传址调用 5. 函数…

真相只有一个——谁是凶手

谁是凶手 1.题目描述2. 解题思路3.代码展示 所属专栏&#xff1a;脑筋急转弯❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &#x1f680; >感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&am…

漫游计算机系统

1.信息就是位 上下文 那么什么是信息呢&#xff1f; 在计算机系统中&#xff0c;所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据。本质上是一串比特位。 那么又要了解什么是比特了&#xff0c;比特&#xff08;bit)就是二进制&#xff…

基于标准库函数的STM32的freertos的移植(一)——github源码压缩包下载

由于freertos官网将freertos内核与freertos工程分别进行版本管理&#xff0c;因此下载freertos需要将参考工程和内核分别下载。由于采用ST公司提供的标准库函数进行因此还需要下载标准库函数&#xff0c;然后进行移植配置。具体流程如下详细描述&#xff1a; 1.首先在github的…

git Husky

虽然我们已经要求项目使用eslint了&#xff0c;但是不能保证组员提交代码之前都将eslint中的问题解决掉了&#xff1a; 也就是我们希望保证代码仓库中的代码都是符合eslint规范的&#xff1b; 那么我们需要在组员执行 git commit 命令的时候对其进行校验&#xff0c;如果不符合…

centos7安装docker 并创建mysql

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上有…

关于强电与弱的的介绍

强电&#xff1f;弱电&#xff1f;傻傻分不清楚&#xff0c;今天海翎光电的小编为大家系统的介绍一下强电与弱电。 什么是强电&#xff1f; &#xff08;1&#xff09;供配电系统&#xff1a;供配电系统包括负荷分级、供电措施、负荷力矩、电网谐波限值、用电指标、负荷所需要…

MySQL数据库修改root账户密码

博主今天登录数据库遇到了一个问题&#xff0c;通过这篇文章&#xff08;http://t.csdn.cn/58ECT&#xff09;解决了。文中关于修改root账户密码的部分&#xff0c;博主觉得有必要写一篇文章总结下。 第一步&#xff1a;用管理员账户打开CMD 第二步&#xff1a;开启mysql服务 …

dubbo源码阅读: dubbo的xml文件如何解析的?

dubbo源码阅读&#xff1a; dubbo的xml文件如何解析的&#xff1f; DubboNamespaceHandlerspring 的接口 NamespaceHandlerspring 的抽象类 NamespaceHandlerSupport学以致用 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns:xsi"http…

征文 | 吸引铁粉?成为CSDN明星!

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 征文 | 吸引铁粉&#xff1f;成为CSDN明星&#xff01; 导读 当今数字时代&#xff0c;社交媒体和在线社区成为了人们交流和分享的主要平台之一&#xff0c;CSDN就是其…