Ajax的初步学习

一、什么是 Ajax?

Ajax (Asynchronous JavaScript and XML) 是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。

主要特性:

  • 异步性 (Asynchronous): 可以在不阻塞用户界面的情况下与服务器进行通信。

  • 局部更新 (Partial Updates): 只更新网页的一部分,而不是整个页面,提高了用户体验。

  • 基于标准: Ajax 不是一种新技术,而是几种现有技术的组合,包括JavaScript, XML, HTML, CSS。

二、Ajax 的核心对象:XMLHttpRequest

XMLHttpRequest (XHR) 对象是 Ajax 的核心。它允许浏览器在后台与服务器进行通信。

三、基本语法和步骤 (XMLHttpRequest)

1.创建 XMLHttpRequest 对象:

let xhr;if (window.XMLHttpRequest) {  // 现代浏览器xhr = new XMLHttpRequest();
} else {  // IE6, IE5xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

2.配置请求 (open 方法):

xhr.open(method, url, async, username, password);
  • method: HTTP 请求方法 (GET, POST, PUT, DELETE 等)。通常使用 GET 或 POST。

  • url: 服务器端脚本的 URL。

  • async: (可选) 布尔值,指示请求是否异步执行。 默认为 true(异步)。

  • username: (可选) 用于身份验证的用户名。

  • password: (可选) 用于身份验证的密码。

xhr.open('GET', 'data.txt', true); // 异步 GET 请求
xhr.open('POST', 'submit.php', true); // 异步 POST 请求

3.设置请求头 (可选):

xhr.setRequestHeader(header, value);
  • header: 请求头的名称。

  • value: 请求头的值。

重要: 对于 POST 请求,通常需要设置 Content-Type 请求头。

示例:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 常用于 POST
xhr.setRequestHeader('Content-Type', 'application/json'); //  POST 发送 JSON 数据

 4.发送请求 (send 方法):

xhr.send(body); // body 是要发送的数据

body: (可选) 要发送到服务器的数据。

  • 对于 GET 请求,通常 body 为 null。 数据应该附加到 URL 上(例如:url?param1=value1&param2=value2)。

  • 对于 POST 请求,body 可以是:

    • null (如果没有数据要发送)

    • URL 编码的字符串 (例如:param1=value1&param2=value2)

    • JSON 字符串 (需要设置 Content-Type 为 application/json)

    • FormData 对象 

xhr.send();  // GET 请求,没有数据
xhr.send('name=John&age=30'); // POST 请求,URL 编码的数据
xhr.send(JSON.stringify({name: "John", age: 30}));  // POST 请求,JSON 数据

5.处理服务器响应:

使用 onreadystatechange 事件监听 xhr.readyState 的变化。

xhr.onreadystatechange = function() {if (xhr.readyState === 4) {  // 请求完成if (xhr.status === 200) { // 请求成功// 处理响应数据let responseText = xhr.responseText; // 字符串形式的响应数据let responseXML = xhr.responseXML;  // 如果服务器返回 XML,可以作为 XML 文档访问// 根据你的需求更新页面等console.log("Response: " + responseText);} else {// 处理错误console.error("请求失败,状态码:" + xhr.status);}}
};
  • xhr.readyState: 表示请求的状态。

    • 0: 请求未初始化

    • 1: 服务器连接已建立

    • 2: 请求已接收

    • 3: 请求处理中

    • 4: 请求已完成,且响应已就绪

  • xhr.status: HTTP 状态码。

    • 200: "OK" (成功)

    • 404: "Not Found" (未找到)

    • 500: "Internal Server Error" (服务器内部错误) 等等。

四、示例

 1.完整的 GET 请求例子 

<!DOCTYPE html>
<html>
<head>
<title>简单的 Ajax GET 请求</title>
</head>
<body><button onclick="loadData()">加载数据</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

 创建一个名为data.txt的文件,内容例如:Hello, Ajax! This is data loaded from the server.

 2.完整的 POST 请求例子

<!DOCTYPE html>
<html>
<head>
<title>简单的 Ajax GET 请求</title>
</head>
<body><button onclick="loadData()">加载数据</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

创建一个名为submit.php的PHP文件(或者其他服务器端语言的文件),例如:

<?php$name = $_POST["name"];echo "你好, " . htmlspecialchars($name) . "!"; // 使用 htmlspecialchars 防止 XSS 攻击
?>

五、使用 FormData 上传文件

FormData 对象提供了一种表示表单数据的键/值对的简单方式,也可以用于上传文件。

<!DOCTYPE html>
<html>
<head>
<title>Ajax 上传文件</title>
</head>
<body><input type="file" id="fileInput"><br><br>
<button onclick="uploadFile()">上传文件</button>
<div id="result"></div><script>
function uploadFile() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};const fileInput = document.getElementById("fileInput");const file = fileInput.files[0];const formData = new FormData();formData.append("file", file); // 添加文件到 FormDataxhr.open("POST", "upload.php", true);xhr.send(formData); // 不需要手动设置 Content-Type,浏览器会自动设置
}
</script></body>
</html>

创建一个名为upload.php的PHP文件(或者其他服务器端语言的文件),例如:

<?php
if (isset($_FILES["file"])) {$file = $_FILES["file"];// 安全起见,你应该进行各种检查,例如文件类型、大小等// 示例:$allowed_types = array("image/jpeg", "image/png", "application/pdf");if (!in_array($file["type"], $allowed_types)) {echo "Error: Invalid file type.";exit;}$upload_dir = "uploads/"; // 确保该目录存在,并且有写入权限$filename = basename($file["name"]); // 获取文件名$target_path = $upload_dir . $filename;if (move_uploaded_file($file["tmp_name"], $target_path)) {echo "文件上传成功!文件名: " . htmlspecialchars($filename);} else {echo "文件上传失败。";}} else {echo "没有文件上传。";
}
?>

 

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

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

相关文章

OOM电商系统订单缓存泄漏,这是泄漏还是溢出

电商系统订单缓存泄漏的本质分析一、明确概念区别内存泄漏&#xff08;Memory Leak&#xff09;定义&#xff1a;对象已经不再被使用&#xff0c;但由于被错误引用而无法被垃圾回收特点&#xff1a;内存使用量随时间持续增长&#xff0c;最终可能导致OOM类比&#xff1a;像浴缸…

二进制安全-汇编语言-02-寄存器

二、寄存器 水滴石穿 一个典型的CPU由运算器、控制器、寄存器等器件构成&#xff0c;这些器件靠内部总线相连 内部总线实现CPU内部各个器件之间的联系&#xff0c;外部总线实现CPU和主板上其他器件的联系 简单说&#xff0c;在CPU中&#xff1a; 运算器进行信息处理寄存器进…

Java——初始guava(1)

基于 Google Guava 官方教程的解答 📚 Guava 提供了哪些 JDK 不具备的 API? Guava 扩展了 JDK 的集合框架,提供了多种 JDK 没有的实用 API: 不可变集合(Immutable Collections) ImmutableList、ImmutableSet、ImmutableMap 等特性:创建后不可修改,线程安全,性能优于…

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享内存

一、目的 是为了c来读取并解码传递给python&#xff0c;Python做测试非常方便&#xff0c;c 和 python之间必须定好协议&#xff0c;整体使用c 来解码&#xff0c;共享内存传递给python 二、主类 主类&#xff0c;串联decoder&#xff0c;注意decoder并没有直接在显存里面穿…

react函数组件的props,ref,state。

react开发我们会把页面分为一个个组件&#xff0c;组件是独立而且可复用的重复代码片段。具体来说组件可以是一个按钮&#xff0c;一个输入框。react组件有两种定义方法&#xff0c;一种是函数组件&#xff0c;一种是类组件。我们这里说一下函数组件之间父子之间如何传递props参…

基于ARM+FPGA实现的BISS-C协议解决方案,适用于高精度光栅位移传感器等

模块简介 本资源提供了专为FPGA设计的BISS-C接口协议发送模块源码。BISS-C模式作为一种高速、同步的串行通信协议&#xff0c;广泛应用于高精度光栅位移传感器的数据传输中&#xff0c;特别适用于需要精确位置信息的应用场景。此模式遵循主从架构&#xff0c;其中FPGA作为主控制…

spring中@Transactional注解和事务的实战理解附代码

文章目录 前言一、事务是什么&#xff1f;二、事务的特性2.1隔离性2.2事务的隔离级别 三、Transactional注解Transactional注解简介基本用法常用属性配置事务传播行为事务隔离级别异常处理与回滚性能优化建议 四、 事务不生效的可能原因方法访问权限非public自调用问题异常被捕…

替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用

SCA7606&#xff08;智芯微&#xff09;产品解析与推广文案一、产品概述SCA7606 是 智芯微电子&#xff08;ZXMICRO&#xff09; 推出的一款 高精度数字隔离式电流传感器芯片&#xff0c;采用 霍尔效应数字输出 技术&#xff0c;专为 工业控制、新能源、智能电网 等领域的电流检…

Java 与 Vue 全栈开发:“一课一得“ 学习笔记系统实战

一、项目背景与核心价值 "一课一得" 是一个面向学习者的笔记管理平台&#xff0c;旨在帮助用户系统化记录、整理和回顾学习内容。项目采用前后端分离架构&#xff1a;前端基于 Vue.js 构建交互式界面&#xff0c;后端使用 Java Spring Boot 实现业务逻辑&#xff0c…

百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析

声明&#xff1a;本文只做实际测评&#xff0c;并非广告 1.前言 2025 年 6 月 30 日&#xff0c;百度做出一项重大举措&#xff0c;将文心大模型 4.5 系列正式开源&#xff0c;并选择国内领先的开源平台 GitCode 作为首发平台。该模型也是百度在2025年3月16日发布的自研的新一…

力扣_链表_python版本

一、206. 反转链表代码&#xff1a; class Solution:def reverseList(self, head):dummy ListNode()cur headwhile cur:last cur.nextcur.next dummy.nextdummy.next curcur lastreturn dummy.next二、92. 反转链表 IIclass Solution:def reverseBetween(self, head: Opt…

[netty5: WebSocketProtocolHandler]-源码分析

在阅读这篇文章前&#xff0c;推荐先阅读&#xff1a;[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源码分析 WebSocketProtocolHandler WebSocketProtocolHandler 是 WebSocket 处理的基础抽象类&#xff0c;负责管理 Web…

[2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)

引言 多模态目标跟踪&#xff08;Multi-modal Object Tracking&#xff09;旨在通过结合RGB模态与其他辅助模态&#xff08;如热红外、深度、事件数据&#xff09;来增强可见光传感器的感知能力&#xff0c;尤其在复杂场景下显著提升跟踪鲁棒性。然而&#xff0c;现有方法在频…

理想汽车6月交付36279辆 第二季度共交付111074辆

理想汽车-W(02015)发布公告&#xff0c;2025年6月&#xff0c;理想汽车交付新车36279辆&#xff0c;第二季度共交付111074辆。截至2025年6月30日&#xff0c;理想汽车历史累计交付量为133.78万辆。 在成立十周年之际&#xff0c;理想汽车已连续两年成为人民币20万元以上中高端市…

MobileNets: 高效的卷积神经网络用于移动视觉应用

摘要 我们提出了一类高效的模型&#xff0c;称为MobileNets&#xff0c;专门用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构&#xff0c;利用深度可分离卷积构建轻量级的深度神经网络。我们引入了两个简单的全局超参数&#xff0c;能够有效地在延迟和准确性之间进行…

SDP服务发现协议:动态查询设备能力的底层逻辑(面试深度解析)

SDP的底层逻辑揭示了物联网设备交互的本质——先建立认知,再开展协作。 一、SDP 核心知识点高频考点解析 1.1 SDP 的定位与作用 考点:SDP 在蓝牙协议栈中的位置及核心功能 解析:SDP(Service Discovery Protocol,服务发现协议)位于蓝牙协议栈的中间层,依赖 L2CAP 协议传…

CppCon 2018 学习:GIT, CMAKE, CONAN

提到的&#xff1a; “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 这些是 C 项目开发中最核心的工具链组成部分。下面我将逐一解释每部分的作用、常见工具&#xff0c;以及它们如何协同构建现代 C 项目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的线性回归的例子(五)

我们使用Iris数据&#xff0c;Sepal length为y值而Petal width为x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…

虚幻基础:动作——蒙太奇

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 动作——蒙太奇如果动作被打断&#xff0c;则后续的动画通知不会执行 动作——蒙太奇 如果动作被打断&#xff0c;则后续的动画通知不会执行