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

    扩展:Ajax的封装Axios

    1.请求传参
    1. import axios from 'axios';
    2. async function postData() {
    3. try {
    4. const response = await axios.post('https://api.example.com/data', {
    5. firstName: 'Fred',
    6. lastName: 'Flintstone'
    7. });
    8. console.log(response.data);
    9. } catch (error) {
    10. console.error('Error posting data:', error);
    11. }
    12. }
    13. postData();

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

    1. {
    2. "firstName": "Fred",
    3. "lastName": "Flintstone"
    4. }

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

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

    1. import axios from 'axios';
    2. async function postXMLData() {
    3. try {
    4. const xmlString = 'Some XML content';
    5. const response = await axios.post('https://api.example.com/data', xmlString, {
    6. headers: {
    7. 'Content-Type': 'application/xml' // 手动设置
    8. }
    9. });
    10. console.log(response.data);
    11. } catch (error) {
    12. console.error('Error posting XML data:', error);
    13. }
    14. }
    15. postXMLData();
    2.接收返回值 

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

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

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

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

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

    1. <script>
    2. import axios from 'axios';
    3. export default {
    4. data() {
    5. return {
    6. xmlData: null,
    7. error: null
    8. };
    9. },
    10. async created() {
    11. try {
    12. const response = await axios.get('https://api.example.com/data', {
    13. responseType: 'document' // 指定返回XML格式数据
    14. });
    15. // 解析XML数据
    16. const parser = new DOMParser();
    17. const xmlDoc = parser.parseFromString(response.data, 'text/xml');
    18. // 从XML文档中读取数据
    19. const items = xmlDoc.getElementsByTagName('item'); // 假设每个item是你想要的数据节点
    20. this.xmlData = [];
    21. for (let i = 0; i < items.length; i++) {
    22. const item = items[i];
    23. // 这里可以根据XML结构读取属性或文本内容
    24. const data = {
    25. id: item.getAttribute('id'),
    26. name: item.getAttribute('name'),
    27. value: item.textContent
    28. };
    29. this.xmlData.push(data);
    30. }
    31. } catch (error) {
    32. this.error = 'An error occurred while fetching the XML data.';
    33. console.error(error);
    34. }
    35. }
    36. };
    37. script>

     

     

  • 相关阅读:
    docker安装Nginx、tomacat、Elasticsearch
    erron变量、strerror函数 和 perror 函数
    使用Selenium-PO设计模式提高Web自动化测试效率
    2022届物联网毕业生作品【基于QT的智能家居网关的设计与实现】——
    ideal连接mysql数据库时发生如下报错怎么办?
    exFAT文件系统的目录与文件存储
    SpringBoot-Druid
    个人对JPA,mybatis,mybatisPlus的一点小小认知
    hosts文件地址
    [paper]PYVA 论文浅析
  • 原文地址:https://blog.csdn.net/Niucode/article/details/138112677