iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >前端开发中怎么处理AJAX请求的重复使用
  • 627
分享到

前端开发中怎么处理AJAX请求的重复使用

2024-04-02 19:04:59 627人浏览 八月长安
摘要

这篇文章给大家分享的是有关前端开发中怎么处理ajax请求的重复使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在开发前端时,我们经常使用AJAX来初始化数据并动态渲染在页面上,

这篇文章给大家分享的是有关前端开发中怎么处理ajax请求的重复使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

开发前端时,我们经常使用AJAX来初始化数据并动态渲染在页面上,但是在遇到一连串的相同数据都要进行请求时,就有可能对同一个api  发出并发请求,然而,因为这些请求是同时发出,因此响应也非常可能是相同的,这样讲可能不够清楚,直接写一个简易的范例来解释这个情况。

实际范例

首先我们先撰写一个API:

https://localhost:3000/api/v1/users/:uuid

这个API的回传值如下:

{     "name":"Username{uuid}",     "uuid":"{uuid}" }

随后开一个Vue的demo,并且先通过AxiOS写一个请求的函数:

// fetch-user.js  const axios = require('axios');  module.exports = (uuid) => {     let uri = `Http://localhost:3000/users/${uuid}`;     return new Promise(resolve => {         axios.get(uri).then(resolve);     }) };

然后我们在Vue例子中新增一个User Component(User.vue)来负责渲染并请求接口:

<template>     <div v-if="init">         <ul>             <li>{{user.name}}</li>             <li>{{user.uuid}}</li>         </ul>     </div> </template>  <script>     const fetchUser = require('../lib/fetch-user');     export default {         name: 'User',         data: function() {             return {                 init: false,                 user: null             }         },         props: {             uuid: String         },         async mounted() {             const response = await fetchUser(this.uuid);             this.init = true;             this.user = response.data;         }     } </script>

最后将用户组件放入App.vue中:

<template>     <div id="app">         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>         <user uuid="user-uuid"></user>     </div> </template>  <script> import User from './components/User';  export default {     name: 'App',     components: {         User     } } </script>

接着我们看一下显示结果:

前端开发中怎么处理AJAX请求的重复使用

这样就正确显示了,然而这里有一个问题非常值得注意:

前端开发中怎么处理AJAX请求的重复使用

我们打开开发者模式就会发现,每个组件向该API发出了请求,因此就产生了10次的并发请求,但是在这种情况下,实际上我们仅需要让一个请求出去,另外9个元件等待这个请求的响应然后重新使用即可。

改进的方法

接下来将讲解要如何实现关于在同一个组件之间唯一指定API请求一次并分配请求,我们会用到这个元件EventTarget,这个元件有点类似node.js中的EventEmitter,主要就是用于接收事件。

随后我们改写fetchUser()函数:

const axios = require('axios');   class FetchCompleteEvent extends Event {     constructor(type, data) {         super(type);         this.data = data;     } }  // 用于请求成功时使用的事件监听器 const eventEmitter = new EventTarget();  // 用于请求失敗时使用的事件监听器 const errorEmitter = new EventTarget();    const requestingList = new Map();  module.exports = (uuid) => {      let uri = `http://localhost:3000/users/${uuid}`;      return new Promise((resolve, reject) => {          // 如果没有记录,或者尚未处于请求状态         if (!requestingList.has(uri) || !requestingList.get(uri)) {              // 进入之后立即将请求状态设为 true             requestingList.set(uri, true);              // 请求 URI             axios.get(uri).then(response => {                  // 完成请求之后将请求状态设为 false                 requestingList.set(uri, false);                  // 发出一个事件通知來告诉 callback 请求完成了                 eventEmitter.dispatchEvent(new FetchCompleteEvent(uri, response));                 resolve(response);              }).catch((e) => {                  // 请求失败也算是请求完成,将请求状态设为 false                 requestingList.set(uri, false);                  // 发出一个事件通知來告诉 callback 请求失败了                 errorEmitter.dispatchEvent(new FetchCompleteEvent(uri, e));                 reject(e);              })         }          // 当目前指定的 URL 处于请求状态,则不做任何事情         else {              // 向成功的事件监听器注册,当完成之后 resolve()             eventEmitter.addEventListener(uri, (event) => {                 resolve(event.data);             });              // 失败之后 reject()             errorEmitter.addEventListener(uri, (event) => {                 reject(event.data);             })         }     }); };

接着我们重新运行前端应用程序并查看结果:

前端开发中怎么处理AJAX请求的重复使用

结果与一开始一模一样,而是当时我们打开开发者模式就会发现:

前端开发中怎么处理AJAX请求的重复使用

请求已经被减少到剩下一个了,这是因为所有的元件都重复使用了一个同一个响应。通过这种方法将可以大大减少服务器的负载以及前端的运行时间。

感谢各位的阅读!关于“前端开发中怎么处理AJAX请求的重复使用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 前端开发中怎么处理AJAX请求的重复使用

本文链接: https://www.lsjlt.com/news/80298.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 前端开发中怎么处理AJAX请求的重复使用
    这篇文章给大家分享的是有关前端开发中怎么处理AJAX请求的重复使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在开发前端时,我们经常使用AJAX来初始化数据并动态渲染在页面上,...
    99+
    2022-10-19
  • 怎么使用node.js处理前端提交的GET请求
    本篇内容介绍了“怎么使用node.js处理前端提交的GET请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、获取GET请求流程1、首先和...
    99+
    2023-06-17
  • 使用node.js怎么处理前端提交的GET请求
    本篇文章给大家分享的是有关使用node.js怎么处理前端提交的GET请求,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、获取GET请求流程1...
    99+
    2022-10-19
  • 怎么处理使用fetch发送post请求时的参数
    这篇文章主要为大家展示了“怎么处理使用fetch发送post请求时的参数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么处理使用fetch发送post请求时的...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作