Ajax的请求响应

Ajax的全称是Asynchronous JavaScript and XML,即异步的JavaScript和XML(传输储存数据)。它是一种在不重新加载整个页面的情况下更新部分页面的技术。

Ajax的原理

1.用户通过页面上的操作(如点击按钮)触发JavaScript函数的执行;

2.JavaScript函数通过XMLHttpRequest对象向服务器发送请求;

3.服务器接收请求后处理数据,并将结果以XML、JSON等格式返回给浏览器;

4.浏览器接收到响应后,使用JavaScript解析数据并进行页面的更新;

5.页面的更新可以是添加、删除或修改DOM元素,也可以是更新部分页面的内容。

Ajax原理中的关键点是异步通信和DOM操作。异步通信指的是浏览器发送请求后可以继续执行其他的操作,并不需要等待服务器返回响应;而DOM操作指的是通过JavaScript动态修改页面的内容。

使用Ajax可以实现快速、动态的页面更新,提高用户的体验和交互性。

使用Ajax请求接收JSON数据
// 创建一个新的XMLHttpRequest对象
var xhr = new XMLHttpRequest();// 设置请求的URL和方法
var url = 'https://api.example.com/data'; // 替换为你的API地址
xhr.open('GET', url, true); // 第三个参数表示是否异步处理请求// 设置请求头(如果需要的话)
xhr.setRequestHeader('Content-Type', 'application/json'); // 通常用于POST请求// 定义回调函数,处理服务器响应
xhr.onload = function () {if (xhr.status === 200) { // 检查响应状态码是否为200(OK)try {// 尝试解析返回的JSON数据var jsonData = JSON.parse(xhr.responseText);// 在这里处理JSON数据console.log(jsonData);// 或者将其传递给其他函数进行进一步处理processData(jsonData);} catch (error) {// 如果解析JSON失败,打印错误信息console.error('Error parsing JSON:', error);}} else {// 如果状态码不是200,打印错误信息console.error('Request failed. Status:', xhr.status);}
};// 发送请求
xhr.send();// 处理数据的函数(示例)
function processData(data) {// 在这里处理数据// 例如,更新DOM,发起其他请求等
}
 使用Ajax请求接收XML数据(不设置请求头是因为默认返回的数据是XML形式) 
// 创建一个新的XMLHttpRequest对象
var xhr = new XMLHttpRequest();// 设置请求的URL和方法
var url = 'https://api.example.com/data.xml'; // 替换为你的API地址,确保返回XML格式数据
xhr.open('GET', url, true); // 第三个参数表示是否异步处理请求// 设置响应类型为XML
xhr.responseType = 'document';// 定义回调函数,处理服务器响应
xhr.onload = function () {if (xhr.status === 200) { // 检查响应状态码是否为200(OK)// 响应成功,处理XML数据var xmlDoc = xhr.responseXML; // 这是一个XML文档对象if (xmlDoc) {// 解析XML数据var items = xmlDoc.getElementsByTagName('item'); // 假设<item>是你要获取的元素for (var i = 0; i < items.length; i++) {var item = items[i];// 处理每个item元素,例如读取属性和文本内容var id = item.getAttribute('id');var name = item.getAttribute('name');var value = item.textContent;// 在这里可以使用这些数据,例如更新DOM或执行其他操作console.log('ID: ' + id + ', Name: ' + name + ', Value: ' + value);}} else {console.error('Failed to load XML document');}} else {// 如果状态码不是200,打印错误信息console.error('Request failed. Status:', xhr.status);}
};// 设置错误处理函数
xhr.onerror = function () {console.error('XMLHttpRequest error occurred');
};// 发送请求
xhr.send();

扩展:Ajax的封装Axios

1.请求传参
import axios from 'axios';async function postData() {try {const response = await axios.post('https://api.example.com/data', {firstName: 'Fred',lastName: 'Flintstone'});console.log(response.data);} catch (error) {console.error('Error posting data:', error);}
}postData();

在上面示例中,我们传递了一个包含firstNamelastName属性的对象作为第二个参数给axios.post方法。axios会自动将这个对象转换为以下的JSON字符串:

{"firstName": "Fred","lastName": "Flintstone"
}

同时,axios会自动的设置请求的Content-Typeapplication/json,告诉服务器它正在发送一个JSON格式的数据体。 

如果需要发送一个原始的字符串,例如XML数据,可以这样做: 

import axios from 'axios';async function postXMLData() {try {const xmlString = '<request><data>Some XML content</data></request>';const response = await axios.post('https://api.example.com/data', xmlString, {headers: {'Content-Type': 'application/xml' // 手动设置}});console.log(response.data);} catch (error) {console.error('Error posting XML data:', error);}
}postXMLData();
2.接收返回值 

在这个例子中,response.data通常是一个JavaScript对象,因为axios默认会将JSON字符串解析为对象。因此,你可以直接访问它的属性和方法,就像处理普通的JavaScript对象一样。

axios.get('https://api.example.com/data').then(response => {// response.data 通常是服务器返回的JSON数据,已经自动被axios解析为JavaScript对象console.log(response.data);}).catch(error => {console.error(error);});

 在这个例子中,通过设置responseType'text',我们告诉axios不要自动解析响应数据,这样我们就可以手动使用JSON.parse()来解析它。不过,在大多数情况下,让axios自动处理JSON解析会更加方便。

axios.get('https://api.example.com/data', { responseType: 'text' }).then(response => {// 手动解析JSON字符串为JavaScript对象let data = JSON.parse(response.data);console.log(data);}).catch(error => {console.error(error);});

获取XML格式的数据并使用:

<template><div><div v-if="error">Error: {{ error }}</div><div v-else><ul><li v-for="item in xmlData" :key="item.id">{{ item.nodeName }} - {{ item.textContent }}</li></ul></div></div>
</template><script>
import axios from 'axios';export default {data() {return {xmlData: null,error: null};},async created() {try {const response = await axios.get('https://api.example.com/data', {responseType: 'document' // 指定返回XML格式数据});// 解析XML数据const parser = new DOMParser();const xmlDoc = parser.parseFromString(response.data, 'text/xml');// 从XML文档中读取数据const items = xmlDoc.getElementsByTagName('item'); // 假设每个item是你想要的数据节点this.xmlData = [];for (let i = 0; i < items.length; i++) {const item = items[i];// 这里可以根据XML结构读取属性或文本内容const data = {id: item.getAttribute('id'),name: item.getAttribute('name'),value: item.textContent};this.xmlData.push(data);}} catch (error) {this.error = 'An error occurred while fetching the XML data.';console.error(error);}}
};
</script>

 

 

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

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

相关文章

InternLM2-lesson3作业+笔记

茴香豆 https://www.bilibili.com/video/BV1QA4m1F7t4/?vd_source902e3124d4683c41b103f1d1322401fa 一、笔记 RAG RAG(Retrieval Augmented Generation)是一种结合了检索(Retrieval)和生成(Generation)的技术&#xff0c;旨在通过利用外部知识库来增强大预言模型的性能。…

springsecurity-权限控制

一&#xff0c;**需求&#xff1a; **用户没有登录的时候&#xff0c;导航栏上只显示登录按钮&#xff0c;用户登录之后&#xff0c;导航栏可以显示登录的用户信息及注销按钮&#xff01;还有就是&#xff0c;比如admin这个用户&#xff0c;它只有 vip2&#xff0c;vip3功能&a…

【C++】C++的四种类型转换

一、C语言中的类型转换 在C语言中有两种类型转换&#xff0c;隐式类型转换和显示类型转换。 如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化。 隐式类型转换&#…

autodl私有云使用方法(成员端使用)

此时找管理员添加进团队&#xff0c;https://private.autodl.com/访问&#xff0c;登录账号。可以看到容器实例。 点击创建实例&#xff0c;根据所需创建。版本号不可以超过最高的CUDA支持&#xff0c;可以自己拉取镜像。 此处需要注意数据盘使用量&#xff0c;密切关注。存取传…

【WEB前端2024】开源元宇宙:乔布斯3D纪念馆-第10课-摆件的交互

【WEB前端2024】开源元宇宙&#xff1a;乔布斯3D纪念馆-第10课-摆件的交互 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

Erupt Framework:革命性的通用配置管理框架,零前端代码,急速开发通用管理系统

Erupt Framework&#xff1a;革命性的通用配置管理框架&#xff0c;零前端代码&#xff0c;急速开发通用管理系统 摘要 随着技术的快速发展&#xff0c;软件开发的效率和质量成为了企业竞争的关键因素。Erupt&#xff0c;作为一个低代码全栈框架&#xff0c;通过注解的方式动…

光透过率检测仪解析

TH-SGT1便携式隧道光透过率检测仪是一种用于快速、准确地测量隧道内光透过率的设备。它的主要特点是便携性和易用性&#xff0c;方便用户进行现场检测和监测。 这种检测仪通常结合了光电测量技术和现代便携式设计&#xff0c;使得用户可以在各种环境下方便地进行光透过率的测量…

Next实现 i18n 传递 locales 给 getStaticPaths

在 Next.js 中实现国际化&#xff08;i18n&#xff09;时&#xff0c;可以通过配置 next.config.js 文件来传递 locales 给 getStaticPaths 函数。下面是一个示例代码&#xff0c;演示如何在 next.config.js 中配置 locales&#xff0c;并在 getStaticPaths 中获取并使用这些 …

OpenCV如何实现拉普拉斯算子的离散模拟

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV的Sobel 衍生品 下一篇 &#xff1a;OpenCV 如何实现边缘检测器 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 Laplacian&#xff08;&#xff09; 实…

Yolov5 v7.0目标检测——详细记录环境配置、自定义数据处理、模型训练与常用错误解决方法(数据集为河道漂浮物)

1. Yolov5 YOLOv5是是YOLO系列的一个延伸&#xff0c;其网络结构共分为&#xff1a;input、backbone、neck和head四个模块&#xff0c;yolov5对yolov4网络的四个部分都进行了修改&#xff0c;并取得了较大的提升&#xff0c;在input端使用了Mosaic数据增强、自适应锚框计算、自…

C++ 二叉搜索树

文章目录 二叉搜索树的概念二叉搜索树的性质二叉搜索树的模拟实现封装框架添加操作查找操作删除操作 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

PD虚拟机和Crossover软件有什么不同?谁更强大?

PD虚拟机&#xff08;Parallels Desktop&#xff09;和Crossover软件都是为Mac用户提供在macOS上运行Windows应用程序的能力&#xff0c;但它们在设计理念、功能和使用场景上存在一些差异。 PD虚拟机&#xff08;Parallels Desktop&#xff09;的特点&#xff1a; 1. 全面的虚…

MySQL中的并发控制,读写锁,和锁的粒度

MySQL中的并发控制&#xff0c;读写锁&#xff0c;和锁的粒度 并发控制的概述 在数据库系统中&#xff0c;并发控制是一种用于确保当多个用户同时访问数据库时&#xff0c;系统能够提供数据的一致性和隔离性的机制。MySQL支持多种并发控制技术&#xff0c;其中包括锁机制、多…

【论文笔记】设计一款针对情境障碍的视力减弱型文件浏览应用程序(上)

论文关键点 ps&#xff1a;这篇文章可以学习的内容比较多&#xff0c;笔记内容也比较丰富因此本次论文笔记会分为上下期 提出的问题: 不方便视觉障碍的情况下(通勤、走路、眼睛疲劳也算)会用text-speech 系统,但是这种听觉是线性的,不适合skim 推导出了融合听觉和视觉阅读模…

用友 GRP-U8 fastjson远程代码执行漏洞复现(XVE-2024-8863)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友 GRP-U8 R10系列版本 VerifyToken 接口存在低版本fastjson反序列化漏洞,未经…

class094 贪心经典题目专题6【左程云算法】

class094 贪心经典题目专题6【左程云算法】 前言版权推荐class094 贪心经典题目专题6最后 前言 2024-4-23 14:01:48 以下内容源自《【左程云算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://…

用户请求经过哪些处理(公网)

DNS服务器之间协作&#xff1a; 递归DNS查询&#xff1a;用户的请求首先发送到递归DNS服务器。 查询根DNS服务器&#xff1a;递归DNS服务器查询根DNS服务器&#xff0c;以找到管理.com顶级域的TLD DNS服务器。 查询TLD DNS服务器&#xff1a;根DNS服务器响应带有TLD DNS服务器…

1079:计算分数加减表达式的值

1079&#xff1a;计算分数加减表达式的值 时间限制: 1000 ms 内存限制: 65536 KB 提交数:57499 通过数: 41720 【题目描述】 编写程序&#xff0c;输入n的值&#xff0c;求1/1−1/21/3−1/41/5−1/61/7−1/8...(−1)^n−1⋅1/n的值。 【输入】 输入一个正整数n。(1…

让php开发更优雅-ThinkPHP篇

前言 随着开发经验的增加&#xff0c;也伴随团队开发的积累&#xff0c;规范开发显得越来越重要&#xff0c;本文给大家提供一些ThinkPHP框架开发API接口的进阶思路和经验&#xff0c;让大家开发更加统一规范&#xff0c;代码看起来更加优雅。 1.更多使用第三方库。团队开发的…

centos7.6上安装mysql7.6 完整过程

安装过程&#xff1a; 参考&#xff1a;https://blog.csdn.net/qq_45103475/article/details/123151050 查找mysql [rootbogon ~]# whereis mysql mysql: /usr/lib64/mysql /usr/share/mysql 删除目录 [rootbogon ~]# rm -rf /usr/lib64/mysql [rootbogon ~]# whereis mysql m…