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.mfbz.cn/a/566984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java基础之JVM基础调优与常见问题

常见命令 以下命令的介绍&#xff0c;全部在jdk8环境下运行的&#xff1b; jps ☆☆☆☆☆ 查看当前运行的进程号&#xff1b; jmap ☆☆☆ jmap命令可以查看jvm的内存信息&#xff0c;class对应的实例个数以及占用的内存大小 jmap -histo 查看当前java进程 [rdVM-8-12-c…

网动统一通信平台(Active UC) downloadDocument.action 任意文件读取漏洞复现

0x01 产品简介 网动统一通信平台(Active UC) 是一个涵盖了多种通信功能的综合平台&#xff0c;通常包括文字、语音、视频通讯等功能&#xff0c;并且可能提供了一系列的通讯工具和服务。这样的平台通常旨在提升用户的沟通效率和便利性&#xff0c;为用户提供一个统一的通信环境…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

用户体验至上:独立站脱颖而出的关键要素解析

在数字化时代&#xff0c;独立站成为了许多品牌和企业展示自身形象、推广产品、建立客户联系的重要平台。然而&#xff0c;要想在众多的独立站中脱颖而出&#xff0c;吸引并留住用户&#xff0c;良好的用户体验至关重要。本文Nox聚星将和大家探讨如何做好独立站的用户体验&…

antDesignPro ProForm表单里使用dependencies属性

场景&#xff1a;ProForm表单里前一个下拉框选择的值带出后面下拉框的枚举值 <script><ProFormformRef{formRef}onFinish{{}}><ProForm.Group><ProFormSelectname"projectId"label"项目"width"sm"request{projectList}plac…

echerts饼图分割操作

在饼图制作中遇到了一个难点就是饼图中间是分散的 试了很多方法&#xff0c;最后选择了给每个值中间再加一节的处理方式&#xff0c;并把颜色设置为透明就能达到相同效果。 处理后的样式&#xff1a; 代码&#xff1a; let list this.data.list;/饼图内部展示数据// let _t…

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满&#xff1f;简要描述如何为动态开地址散列表设计一个插入算法&#xff0c;使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

54、图论-实现Trie前缀树

思路&#xff1a; 主要是构建一个trie前缀树结构。如果构建呢&#xff1f;看题意&#xff0c;应该当前节点对象下有几个属性&#xff1a; 1、next节点数组 2、是否为结尾 3、当前值 代码如下&#xff1a; class Trie {class Node {boolean end;Node[] nexts;public Node(…

nginx配置挂载html

目标 很多软件的官方文档&#xff0c;在国内打开很慢&#xff0c;每次都得等很久&#xff0c;看到官方同时提供了html的包&#xff0c;所以想着挂载到本地nginx下&#xff0c;查看会方便很多。 下载官方html文档包&#xff0c;解压到documentation_htmls下 想添加新的文档也是…

Sql Server 数据库:查询表结构脚本

查询脚本: SELECT CASE WHEN col.colorder 1 THEN obj.name ELSE END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[value], ) AS 列说明 , t.name AS 数据类型 , col.length AS 长度 , ISNULL(COLUMNPROPERTY(col.id, col.name, Scale), 0) AS 小数位数…

<开源> 轮廓内缩外扩算法

轮廓内缩外扩算法 项目是论文A new offset algorithm for closed 2D lines with Islands的JAVA实现。 项目的GitHub地址&#xff1a;https://github.com/Lee-0o0/polygon-offset-algorithm。 参考博客 https://blog.csdn.net/qq_41261251/article/details/114462696

设计模式 -- 行为型模式

1. 行为型模式概述 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制在类…

java开发之路——node.js安装

1. 安装node.js 最新Node.js安装详细教程及node.js配置 (1)默认的全局的安装路径和缓存路径 npm安装模块或库(可以统称为包)常用的两种命令形式&#xff1a; 本地安装(local)&#xff1a;npm install 名称全局安装(global)&#xff1a;npm install 名称 -g本地安装和全局安装…

input的type=‘radio‘设置只读属性颜色为灰色,如何修改

目录 1.设置input和label的样式为不可点击。 2.设置input的readonly属性。 3.若想变回可修改&#xff0c;用js实现 4.如何自定义radio的颜色。 5.完整代码 input的单选框有时候需要实现只读&#xff0c;两个办法&#xff0c;一个disabled&#xff0c;一个是readonly. 但d…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

前端路由的实现原理

当谈到前端路由时&#xff0c;指的是在前端应用中管理页面导航和URL的机制。前端路由使得单页应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;能够在用户与应用交互时动态地加载不同的视图&#xff0c;而无需每次都重新加载整个页面。 在前端开发中&…

货拉拉0-1数据指标体系构建与应用

目录 一、背景 二、指标体系搭建 2.1 指标设计 2.2 指标体系搭建 2.3 指标维度拆解 三、指标标准化建设 四、指标元数据管理 五、指标应用&未来规划 原文大佬介绍的这篇指标体系构建有借鉴意义&#xff0c;现摘抄下来用作沉淀学习。如有侵权请告知~ 一、背景 指标…

什么是仪器校准报告?

在科学实验和工业生产中&#xff0c;仪器是一种非常重要的辅助工具&#xff0c;无论是测量数据、控制实验进程还是保证产品质量&#xff0c;仪器都发挥着至关重要的作用。为了确保仪器的准确性和稳定性&#xff0c;仪器校准报告这一概念应运而生。本文给大家详细介绍仪器校准报…

利用STM32的定时器和中断实现精准时间控制

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取&#xff0c;感谢支持&#xff01;⬇ 点击领取更多嵌入式详细资料 问题讨论&#xff0c;stm32的资料领取可以私信&#xff01; 在嵌入式系统开发中&#xff0c;精确的时间控制是许多应用的…
最新文章