ToB企服应用市场:ToB评测及商务社交产业平台

标题: http request-01-XMLHttpRequest XHR 简单先容 [打印本页]

作者: 自由的羽毛    时间: 2024-8-17 14:57
标题: http request-01-XMLHttpRequest XHR 简单先容
http 请求系列

http request-01-XMLHttpRequest XHR 简单先容
http request-01-XMLHttpRequest XHR 标准
Ajax 详解-01-AJAX(Asynchronous JavaScript and XML)入门先容
Ajax XHR 的替代方案-fetch
Ajax XHR 的替代方案-fetch 标准
Ajax 的替代方案-axios.js
http 请求-04-promise 对象 + async/await
XHR 的官方学习资料 给出网址

以下是一些官方学习 XMLHttpRequest (XHR) 的资源网址:
这些资源将资助你深入理解 XMLHttpRequest 的功能、用法和规范。
XHR 是什么?

XMLHttpRequest(XHR)是一个用于在客户端和服务器之间举行异步 HTTP 请求的 API,广泛用于动态更新网页内容,而无需重新加载整个页面。
只管它最初是为了处理 XML 数据而设计的,但它如今支持多种数据格式,并已成为 Web 开发中紧张的工具。
1. 根本概念

XMLHttpRequest 提供了在客户端(如浏览器)与服务器之间举行异步通信的能力,使得网页可以在不重新加载页面的情况下更新内容。
它的主要用途包括动态加载数据、提交表单以及与服务器举行及时交互。
2. 核心方法和属性

2.1 创建请求
  1. const xhr = new XMLHttpRequest();
复制代码
2.2 配置请求

  1. xhr.open('GET', 'https://example.com/data', true);
复制代码
2.3 发送请求

  1. xhr.send();
复制代码
2.4 事件处理

  1. xhr.onload = function() {
  2.   if (xhr.status >= 200 && xhr.status < 300) {
  3.     console.log(xhr.responseText);
  4.   } else {
  5.     console.error('Request failed with status:', xhr.status);
  6.   }
  7. };
  8. xhr.onerror = function() {
  9.   console.error('Request error');
  10. };
复制代码
2.5 紧张属性

3. 利用示例

3.1 简单 GET 请求
  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);
  3. xhr.onload = function() {
  4.   if (xhr.status === 200) {
  5.     console.log('Response:', xhr.responseText);
  6.   } else {
  7.     console.error('Error:', xhr.status, xhr.statusText);
  8.   }
  9. };
  10. xhr.send();
复制代码
3.2 POST 请求
  1. const xhr = new XMLHttpRequest();
  2. xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts', true);
  3. xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
  4. xhr.onload = function() {
  5.   if (xhr.status === 201) {
  6.     console.log('Created:', xhr.responseText);
  7.   } else {
  8.     console.error('Error:', xhr.status, xhr.statusText);
  9.   }
  10. };
  11. const data = JSON.stringify({ title: 'foo', body: 'bar', userId: 1 });
  12. xhr.send(data);
复制代码
3.3 进度监控
  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);
  3. xhr.onprogress = function(event) {
  4.   if (event.lengthComputable) {
  5.     const percentComplete = (event.loaded / event.total) * 100;
  6.     console.log('Progress:', percentComplete.toFixed(2) + '%');
  7.   }
  8. };
  9. xhr.onload = function() {
  10.   if (xhr.status === 200) {
  11.     console.log('Response:', xhr.responseText);
  12.   } else {
  13.     console.error('Error:', xhr.status, xhr.statusText);
  14.   }
  15. };
  16. xhr.send();
复制代码
4. 优缺点

4.1 长处

4.2 缺点

5. 现代替代

XMLHttpRequest 的一些功能和用途已经被更现代的 fetch API 所代替。fetch 提供了更简便的语法、支持 Promise 和流处理,使得异步操作和错误处理更为直观。
XHR 为什么须要?解决了什么问题

XMLHttpRequest (XHR) 是一种用于在浏览器和服务器之间举行异步通信的 API。它在 Web 开发中解决了多个关键问题,特别是在用户体验和动态网页更新方面。
以下是 XMLHttpRequest 须要的缘故原由及其解决的问题:
1. 页面异步更新

问题

解决方案

2. 提高用户体验

问题

解决方案

3. 动态内容加载

问题

解决方案

4. 背景数据处理

问题

解决方案

5. 局部更新和请求管理

问题

解决方案

6. 进度监控

问题

解决方案

7. 与其他技术的兼容性

问题

解决方案

XHR 的适用场景,优缺点

XMLHttpRequest(XHR)在 Web 开发中有一些特定的适用场景,以及它的长处和缺点。
以下是一些现实应用场景和它们的优缺点,用更接地气的方式来表明:
适用场景

长处

缺点

XHR 的利用最佳实践

利用 XMLHttpRequest (XHR) 时,遵循一些最佳实践可以资助你写出更高效、可靠和可维护的代码。以下是一些现实的最佳实践:
1. 利用异步请求

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://example.com/data', true);
  3. xhr.send();
复制代码
2. 处理请求状态变革

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://example.com/data', true);
  3. xhr.onreadystatechange = function() {
  4.   if (xhr.readyState === 4) { // DONE
  5.     if (xhr.status === 200) {
  6.       console.log('Response:', xhr.responseText);
  7.     } else {
  8.       console.error('Error:', xhr.status, xhr.statusText);
  9.     }
  10.   }
  11. };
  12. xhr.send();
复制代码
3. 设置适当的请求头

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('POST', 'https://example.com/data', true);
  3. xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
  4. const data = JSON.stringify({ key: 'value' });
  5. xhr.send(data);
复制代码
4. 处理错误和超时

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://example.com/data', true);
  3. xhr.timeout = 5000; // 设置超时时间为 5000 毫秒
  4. xhr.ontimeout = function() {
  5.   console.error('Request timed out');
  6. };
  7. xhr.onerror = function() {
  8.   console.error('Request error');
  9. };
  10. xhr.onload = function() {
  11.   if (xhr.status === 200) {
  12.     console.log('Response:', xhr.responseText);
  13.   }
  14. };
  15. xhr.send();
复制代码
5. 监控进度

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://example.com/largefile', true);
  3. xhr.onprogress = function(event) {
  4.   if (event.lengthComputable) {
  5.     const percentComplete = (event.loaded / event.total) * 100;
  6.     console.log('Progress:', percentComplete.toFixed(2) + '%');
  7.   }
  8. };
  9. xhr.onload = function() {
  10.   if (xhr.status === 200) {
  11.     console.log('File downloaded successfully');
  12.   }
  13. };
  14. xhr.send();
复制代码
6. 避免回调地狱

  1. function fetchData(url) {
  2.   return new Promise((resolve, reject) => {
  3.     const xhr = new XMLHttpRequest();
  4.     xhr.open('GET', url, true);
  5.     xhr.onload = function() {
  6.       if (xhr.status === 200) {
  7.         resolve(xhr.responseText);
  8.       } else {
  9.         reject(new Error(`Request failed with status ${xhr.status}`));
  10.       }
  11.     };
  12.     xhr.onerror = function() {
  13.       reject(new Error('Network error'));
  14.     };
  15.     xhr.send();
  16.   });
  17. }
  18. // 使用
  19. fetchData('https://example.com/data')
  20.   .then(response => console.log('Response:', response))
  21.   .catch(error => console.error('Error:', error));
复制代码
7. 处理不同数据格式

  1. const xhr = new XMLHttpRequest();
  2. xhr.open('GET', 'https://example.com/data', true);
  3. xhr.onload = function() {
  4.   if (xhr.status === 200) {
  5.     const contentType = xhr.getResponseHeader('Content-Type');
  6.     if (contentType.includes('application/json')) {
  7.       const data = JSON.parse(xhr.responseText);
  8.       console.log('JSON data:', data);
  9.     } else {
  10.       console.log('Response:', xhr.responseText);
  11.     }
  12.   }
  13. };
  14. xhr.send();
复制代码
8. 保持代码简便

  1. function createRequest(method, url, callback) {
  2.   const xhr = new XMLHttpRequest();
  3.   xhr.open(method, url, true);
  4.   xhr.onload = function() {
  5.     if (xhr.status >= 200 && xhr.status < 300) {
  6.       callback(null, xhr.responseText);
  7.     } else {
  8.       callback(new Error(`Request failed with status ${xhr.status}`));
  9.     }
  10.   };
  11.   xhr.onerror = function() {
  12.     callback(new Error('Network error'));
  13.   };
  14.   xhr.send();
  15. }
  16. // 使用
  17. createRequest('GET', 'https://example.com/data', (error, response) => {
  18.   if (error) {
  19.     console.error('Error:', error);
  20.   } else {
  21.     console.log('Response:', response);
  22.   }
  23. });
复制代码
总结

遵循这些最佳实践可以资助你在利用 XMLHttpRequest 时编写更高效、可靠和易于维护的代码。
固然 fetch API 提供了更现代的接口,但相识和把握 XMLHttpRequest 仍旧在许多情况下很紧张,尤其是在处理兼容性问题时。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4