Ajax 笔记/练习

news2024/9/24 15:19:22

Ajax

异步JavaScript和XML

作用

实现 HTML 在不整体刷新的情况下,通过后台服务器,请求数据并局部更新页面内容

  • 操作流程

    image-20231019150656824

Ajax 使用

  • XMLHttpRequest

    通过new 关键字可以创建XMLHttpRequest() 对象。

    var req = new XMLHttpRequest();
    
    方法和属性说明
    req.open(method, url, async)method:[GET|POST] url:url async:[true(异步,默认) | false(同步)]
    req.send()发送HTTP 请求
    req.responseText获得字符串形式的响应数据。
    readyState存有XMLHttpRequest 的状态。 请求发送到后台后,状态会从0 到4 发生变化: 1:服务器连接已建立。 2:请求已接收。 3:请求处理中。 4:请求已完成,且响应已就绪。
    req.onreadystatechange每当readyState 属性改变时,就会调用该函数。
    status状态码

image-20231019150731887

  • 创建 Ajax 对象

    var xhr = new XMLHttpRequest()
    
  • onreadystatechange

    readyState 的值发生变化就会触发该事件

    xhr.onreadystatechange = function () {
        // 每次readyState 改变的时候触发该事件
    }
    
  • 配置连接信息

    Ajax 对象中的 .open 方法用来配置请求信息

    xhr.open("GET","aj.php",true);
    
    • 第一个参数是本次的请求方式 get / post / put / …
    • 第二个参数是本次请求的 url
    • 第三个参数是本次请求是否是异步,true (默认)表示异步,false 表示同步
    • xhr.open('get','/data.php')
  • 发送请求

    xhr.send()
    

Ajax 状态码

  • readyState

    readyState === 0 : 表示未初始化完成,也就是 open 方法还没有执行
    readyState === 1 : 表示配置信息已经完成,也就是执行完 open 之后
    readyState === 2 : 表示 send 方法已经执行完成
    readyState === 3 : 表示正在解析响应内容
    readyState === 4 : 表示响应内容已经解析完毕,可以在客户端使用了

    只有当 readyState === 4 的时候,我们才可以正常使用服务端给我们的数据,配合 http 状态码 status===200 两个条件都满足本次请求才可以完成

    如果XMLHttpRequest对象的readyState属性值等于4,表示异步调用过程完毕,就可以通过XMLHttpRequest对象的 responseText 属性或 responseXml 属性来获取数据

使用 Ajax 发送请求时携带的参数

  • 与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

    然而,在以下情况中,请使用 POST 请求:

    • 无法使用缓存文件(更新服务器上的文件或数据库)
    • 向服务器发送大量数据(POST 没有数据量限制)
    • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
  • get 请求的参数就直接在 url 后面进行拼接就可以

    const xhr = new XMLHttpRequest()
    // 直接在地址后面加一个 ?,然后以 key=value 的形式传递 // 两个数据之间以 & 分割
    xhr.open('get', './data.php?a=100&b=200')
    xhr.send()
    

    这样服务端就能接受到两个参数 一个是 a,值是 100,一个是 b,值是 200

  • post 请求的参数是携带在请求体 send() 中的,所以,不需要再 url 后面拼接

    const xhr = new XMLHttpRequest()
    xhr.open('post', './data.php')
    xhr.send('a=100&b=200')
    // 如果是用 ajax 对象发送 post 请求,必须要先设置一下请求头中的 content- type
    // 告诉一下服务端我给你的是一个什么样子的数据格式 xhr.setRequestHeader('content-type', 'application/x-www-form- urlencoded')
    

Ajax 封装使用实例

  • index.html 文件

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    </head>
    <body>
    	<div>part_one</div>
    	<input type="button" value="点击局部刷新" onclick="part_refresh()">
    	<div id="d1"></div>
    </body>
    <script>
    	function part_refresh(){
    	// 创建点击 button 触发刷新的方法
    		var xhr = new XMLHttpRequest();
    		// 创建 Ajax 对象
    		xhr.onreadystatechange=function re(){
    		// 当 readyState 的值发生变化时执行此方法中的代码	
    			if(xhr.readyState===4 && xhr.status===200){
    			// 当内容解析完毕,并且成功处理了请求时执行语句
    				document.getElementById("d1").innerHTML=xhr.responseText;
    				// 在网页上第二个 <div> 标签内输出获取的 xhr 对象文本格式的响应数据
    			}
    		}
    		xhr.open("GET","aj.php",true);
    		// 配置连接信息
    		xhr.send();
    		// 发送请求
    	}
    </script>
    </html>
    
  • aj.php 文件

    <?php
    $str = "hello";
    echo $str;
    ?>
    
  • 将 index.html 文件和 aj.php 文件放入 PHPstudy 的 www 目录下

    开启 phpstudy

  • 在浏览器地址栏打开 127.0.0.1/index.html

    image-20231019150746449

    点击局部刷新按钮后

    可以看到第二个源代码 div 块中的值发生变化

    image-20231019150754987

局部刷新与整页刷新的区别

  • 整页刷新

    手动更改源代码中第一个 <div> 块中的文本内容

    image-20231019150811540

    点击整页刷新按钮,发现更改的内容恢复到更改前的状态

    image-20231019150902692

  • Ajax 局部刷新

    手动更改源代码中第一个 <div> 块中的文本内容

    image-20231019150947151

    点击局部刷新按钮,发现手动更改的内容未发生改变,而下方刷新出来了新的内容,源代码中手动更改的 <div> 块未改变,第二个 <div> 代码块刷新后发生改变

    image-20231019151002779

前端跨域问题

同源策略

协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源

同源策略限制以下几种行为:

  • Cookie、LocalStorage 和 IndexDB 无法读取
  • DOM和JS对象无法获得
  • AJAX 请求不能发送
URL说明是否允许通信
127.0.0.1/index.html
127.0.0.1/aj.php
同一域名,不同文件或路径允许
http://www.domain.com:8000/a.js
http://www.domain.com/b.js
同一域名,不同端口不允许
http://www.domain.com/a.js
https://www.domain.com/b.js
同一域名,不同协议不允许
http://www.domain.com/a.js
http://192.168.4.12/b.js
域名和域名对应相同ip不允许
http://www.domain.com/a.js
http://x.domain.com/b.js
http://domain.com/c.js
主域相同,子域不同不允许
http://www.domain1.com/a.js
http://www.domain2.com/b.js
不同域名不允许

Ajax 练习

同步请求

  • 环境:

    • ajax.html 放在 phpstudy 的 www 页面下
    • flag.php 放在 phpstudy 的 www 页面下
    • 浏览器访问 127.0.0.1/ajax.html
    • 开启 phpstudy
  • 效果:等待五秒同步刷新文本框和获取的 flag

  • ajax.html 代码

    <!DOCTYPE html>
    <html lang="zh">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    </head>
    <body>
    	<textarea name="" id="kuang" cols="30" rows="10"></textarea>
    </body>
    <script>
    	var x=new XMLHttpRequest;
    	// 创建 Ajax 对象
    	x.open("GET","http://127.0.0.1/flag.php",false);
    	// 配置连接信息
    	x.send();
    	// 发送请求
    	var flag=x.responseText;
    	// 创建变量 flag 接收数据
    	console.log(flag);
    	document.getElementById("kuang").value=flag;
    	// 将文本框中的字符修改为获取的 flag
    </script>
    </html>
    
  • flag.php 代码

    <?php sleep(5); ?>
    ajax flag
    

    image-20231019170929894

异步请求

  • 环境:

    • ajax.html 放在 phpstudy 的 www 页面下
    • flag.php 放在 phpstudy 的 www 页面下
    • 浏览器访问 127.0.0.1/ajax.html
  • 效果:

    浏览网页立刻加载文本框,等待五秒后加载获取的 flag

    点击局部刷新按钮五秒后,flag 重新获取,而页面不刷新

    <!DOCTYPE html>
    <html lang="zh">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    </head>
    <body>
    	<textarea name="" id="kuang" cols="30" rows="10"></textarea>
    	<input type="button" value="局部刷新" onclick="flush()">
    </body>
    <script>
    	function flush(){
    	// 创建点击 button 触发刷新的方法
    		var x=new XMLHttpRequest;
    		// 创建 Ajax 对象
    		x.open("GET","http://127.0.0.1/flag.php",true);
    		// 配置连接信息
    		x.send();
    		// 发送请求
    		x.onreadystatechange=function(){
    		// 当 readyState 的值发生变化时执行此方法中的代码	
    			var flag=x.responseText;
    			// 创建变量 flag 接收数据
    			console.log(flag);
    			document.getElementById("kuang").value=flag;
    			// 将文本框中的字符修改为获取的 flag
    		}
    	}
    	flush()
    	
    </script>
    </html>
    

    image-20231019172433622

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

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

相关文章

Kubernetes技术与架构-Ingress

Ingress是一个流量网关&#xff0c;其根据配置的URI路径路由规则&#xff0c;为运行在Kubernetes集群中的Service分发流量&#xff0c;从系统架构设计的角度看&#xff0c;Ingress位于Service的上层&#xff0c;本文主要描述Ingress的基本使用方式。 如上所示&#xff0c;clien…

Oracle数据库 ORA-28001: the password has expired解决方法

今天在用dbvisualizer登录数据库的时候&#xff0c;报了the password has expired的错误&#xff0c;于是上网查了一下原因&#xff0c;是因为数据库密码过期了&#xff0c;因为默认的是180天。 解决方法&#xff1a; 1&#xff09;用系统用户登录 #在cmd终端输入&#xff1…

跨境电子商城源代码定制网站搭建(商品采集,多货币,多语言)

欢迎来到全新的跨境电子商城源代码定制网站搭建!这是一个集商品采集、多币种和多语言于一身的创新平台&#xff0c;为您的跨境电商事业提供了前所未有的便利和机会! 一、精选全球商品&#xff0c;一站式采集 在跨境电子商务的时代&#xff0c;我们深谙选择高质量商品的重要性。…

AI智慧安防智能监控平台如何做到健身房智能视频监控?

随着大家对健身的重视&#xff0c;健身房也开始遍地开花&#xff0c;健身房的兴起是必然的&#xff0c;但是健身房的管理不容疏忽&#xff0c;通过EasyCVR智能视频监控系统&#xff0c;则可以解决监管不足的问题。 1、安全摄像头布局 根据健身房的大小和布局&#xff0c;合理规…

数据仓库扫盲系列(1):数据仓库诞生原因、基本特点、和数据库的区别

数据仓库的诞生原因 随着互联网的普及&#xff0c;信息技术已经深入到各行各业&#xff0c;并逐步融入到企业的日常运营中。然而&#xff0c;当前企业在信息化建设过程中遇到了一些困境与挑战。 1、历史数据积存。 过去企业的业务系统往往是在较长时间内建设的&#xff0c;很…

微积分 - 泰勒公式

1、简介 泰勒公式&#xff0c;也称泰勒展开式。是用一个函数在某点的信息&#xff0c;描述其附近取值的公式。如果函数足够平滑&#xff0c;在已知函数在某一点的各阶导数值的情况下&#xff0c;泰勒公式可以利用这些导数值来做系数&#xff0c;构建一个多项式近似函数&#x…

微信小程序里报名链接怎么做

微信小程序是一种便捷、实用的应用程序&#xff0c;它依托于微信平台&#xff0c;无需下载安装即可使用。在小程序中&#xff0c;我们可以制作报名链接&#xff0c;以便用户直接在微信中进行报名操作&#xff0c;提高服务效率。下面我们将探讨如何制作微信小程序里的报名链接为…

vue使用carousel(走马灯)开发轮播图

在main.js 引入 import VueCarousel from vue-carousel;Vue.use(VueCarousel);在这里插入代码片 <template><div><div class"my-swipe"><carousel :per-page"1" :loop"true" :autoplay"true" :paginationEnable…

科学清理Windows系统垃圾,让你的电脑性能快如火箭

文章目录 1. 使用磁盘清理工具2. 清理临时文件2.1 清理用户临时文件夹2.2 清理系统临时文件夹2.3 清理系统临时文件 3.卸载不需要的程序4. 删除不必要的下载文件5. 清理回收站6. 压缩磁盘7. 删除旧的系统还原点8. 禁用休眠功能9. 定期进行磁盘碎片整理10. 禁用不必要的启动项11…

JOE alkyne, 6-isomer可以与许多化合物进行反应,包括醇、酚、胺、羧酸等

试剂 | 基础知识概述&#xff08;部分&#xff09;: 英文名&#xff1a;JOE alkyne, 6-isomer 分子式&#xff1a;C26H17NCl2O8 分子量&#xff1a;542.32 Ex&#xff1a;533nm Em&#xff1a;554nm 规格标准&#xff1a;1g、5g、10g&#xff0c;可提供mg级以及kg级的产品…

2023年全球线上教育营收规模及未来发展趋势分析:推动知识付费市场增长[图]

随着知识经济的到来&#xff0c;我们的学习模式受到了前所未有的冲击&#xff0c;各种新的学习模式如潮水般涌现&#xff0c;在所有学习模式中&#xff0c;最具有冲击力的便是随着网络技术发展而出现的网络化学习&#xff0c;又称在线学习&#xff0c;它是通过在网上建立教育平…

一些ECharts配置

基于vue3&#xff0c;EChart5.4.3版本 Line <script setup lang"ts"> import {onBeforeUnmount, onMounted, ref, watch} from "vue" import {useEcharts, type ECOption} from "/composables" import * as echarts from "echarts/c…

API网关与社保模块

API网关与社保模块 理解zuul网关的作用完成zuul网关的搭建 实现社保模块的代码开发 zuul网关 在学习完前面的知识后&#xff0c;微服务架构已经初具雏形。但还有一些问题&#xff1a;不同的微服务一般会有不同的网 络地址&#xff0c;客户端在访问这些微服务时必须记住几十甚至…

​iOS上架App Store的全攻略

第一步&#xff1a;申请开发者账号 在开始将应用上架到App Store之前&#xff0c;你需要申请一个开发者账号。 1.1 打开苹果开发者中心网站&#xff1a;Apple Developer 1.2 使用Apple ID和密码登录&#xff08;如果没有账号则需要注册&#xff09;&#xff0c;要确保使用与公…

【Unity3D编辑器拓展】Unity3D的IMGUI、GUI、GUILayout、EditorGUI、EditorGUILayout、OnGUI【全面总结】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;常常会遇到要使用OnGUI的地方。 也会遇到…

4090今天被下架了

刚看了一下基本知识&#xff0c;我来给他们简单普及一下它。 4090网吧还有Ai公司都很常用&#xff0c;比如我们公司就用他来训练数字人。 4090经测试&#xff0c;训练的速度是3060的8倍。也就是说&#xff0c;我训练一个数字人要1天&#xff0c;但是3060需要8天。这个成本显而…

统计学习方法 感知机

文章目录 统计学习方法 感知机模型定义学习策略学习算法原始算法对偶算法 学习算法的收敛性 统计学习方法 感知机 读李航的《统计机器学习》时&#xff0c;关于感知机的笔记。 感知机&#xff08;perceptron&#xff09;是一种二元分类的线性分类模型&#xff0c;属于判别模型…

1024程序员节特辑 | OKR VS KPI谁更合适?

专栏集锦&#xff0c;赶紧收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https://blog.…

预测性维护为何能够帮助企业降低设备维护成本?

预测性维护在企业设备管理中扮演着重要的角色&#xff0c;它通过实时监测设备状态和数据分析&#xff0c;能够提前预测潜在故障&#xff0c;并采取相应的维修措施&#xff0c;从而帮助企业降低设备维护成本。本文将介绍预测性维护的作用&#xff0c;探讨造成设备维护成本高的原…