首页
学习
活动
专区
圈层
工具
发布

JavaScript手写实现AJAX请求以及使用Promise封装AJAX请求

AJAX概念 AJAX是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的 异步通信,从服务器 获取 XML 文档从中提取数据,再更新当前网...实现步骤 创建一个XMLHttpRequest对象 在这个对象上使用open()方法创建一个http请求,open方法所需要的参数是请求的方法,请求的地址,是否异步和用户的认证信息。...在发起请求之前,可以为这个对象添加一些信息和监听函数。比如可以通过setRequestHeader方法来为请求添加头信息。还可以为这个对象添加一个状态监听函数。...当对象的readyState变为4的时候,代表服务器返回的数据接收完成,这个时候可以通过判断请求的状态,如果状态是2xx或304的话就代表返回正常。...='json'; xhr.setRequestHeader("Accept","application/json"); //发送HTTP请求 xhr.send(null); 使用Promise封装 function

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    社招前端二面必会react面试题及答案_2023-05-19

    useEffect(callback, source)接受两个参数callback: 钩子回调函数;source: 设置触发条件,仅当 source 发生改变时才会触发;useEffect钩子在没有传入...: 传入[],回调中的返回的函数也只会被最终执行一次const useUnmount = (fn) => useEffect(() => fn, [])mounted: 可以使用 useState 封装成一个高度可复用的...;自定义钩子(useXxxxx): 基于 Hooks 可以引用其它 Hooks 这个特性,我们可以编写自定义钩子,如上面的useMounted。...在哪个生命周期中你会发出Ajax请求?为什么?Ajax请求应该写在组件创建期的第五个阶段,即 componentDidMount生命周期方法中。原因如下。在创建期的其他阶段,组件尚未渲染完成。...因此在这些阶段发岀Ajax请求显然不是最好的选择。在组件尚未挂载之前,Ajax请求将无法执行完毕,如果此时发出请求,将意味着在组件挂载之前更新状态(如执行 setState),这通常是不起作用的。

    1.9K10

    使用shiro自定义过滤器,拦截ajax请求,可用于动静分离

    shiro,不多说了,都知道是权限框架 用过shiro的都知道shiro自己有各种过滤器,只要配置好了就可以自动过滤,自动跳转到对应的页面,比如:认证,授权,退出等,都是通过自身的过滤器, 咱们来看这张图就能大致看到...但是,shiro过滤器基于servlet,当然也是这么做的,但是如今使用ajax的框架很多,比如easyUI,extJS,或者有的公司自己实现全ajax静态分离,遇到这样的情况,shiro拦截到session...过期后,是不会页面跳转的,那么这个时候就要重写过滤器了 首先,在spring-shiro.xml中得自定义你的过滤器 然后自定义过滤器需要继承FormAuthenticationFilter.java...这个类,并且重写 这个方法,是自己写的判断当前request是否ajax请求, 抛出异常,让前端js接受到response请求认证失败, 是很早以前的写法,只支持ajax load页面形式...,不论是页面级别请求还是ajax请求,都能够跳转至登录页面,当然了如果你有其他的错误都可以封装到这个类中,并且这个.js可以被任何页面调用。

    2.4K50

    如何更好的在 react 中使用 axios 的拦截器

    尽管目前已经有各种优秀的基于 react 的 ajax 封装,例如 SWR、ahooks 中的 useRequest,但是它们更像是对 async_function 或 Promise 进行处理,而非确切的...简单的说,配置一个请求头前面这两个库就没有本地支持,因为它们默认都是使用 fetch 进行处理,本身对 ajax 并没有进行更深的封装。...使用 axios 中消费上下文一直是个非常棘手的事情,但是使用了上述封装,代码会变得异常简单。...这个例子中,我们模拟请求日志监听,并把监听到的请求通过 Context 进行写入,然后在应用中展示出来。...你可以使用下面的方式复现这个 bug,我们来修改日志库文件提供的 useLog 服务: // 日志钩子 export function useLog() { const { log, update

    3.2K30

    react hooks api

    React 默认提供了一些常用钩子,你也可以封装自己的钩子。 所有的钩子都是为函数引入外部功能,所以 React 约定,钩子一律使用use前缀命名,便于识别。...你要使用 xxx 功能,钩子就命名为 usexxx。 下面介绍 React 默认提供的四个最常用的钩子。...3.4 useEffect():副作用钩子 useEffect()用来引入具有副作用的操作,副作用最常见的就是:网络请求、订阅某个模块或者 DOM 操作。...3.5 自定义hook 自定义 Hook 的命名有讲究,必须以use开头,在里面可以调用其它的 Hook。入参和返回值都可以根据需要自定义,没有特殊的约定。...使用也像普通的函数调用一样,Hook 里面其它的 Hook(如useEffect)会自动在合适的时候调用: 在3.4的例子中,完全可以进一步封装。

    3.3K10

    React 全面入门指南

    Context 机制跨层级组件通信​​实现步骤​​: 使用 createContext 方法创建一个上下文对象 Ctx在顶层组件(App)中通过 Ctx.Provider 组件提供数据在底层组件中通过...在底层组件 通过 useContext 钩子函数使用数据 const msg = useContext(MsgContext) return ( this is...(如 Ajax 请求,更改 DOM)​​语法​​: useEffect(() => {}, [])参数 1 是一个函数,在内部可以放置要执行的操作参数 2 是一个数组,可以放置依赖项,不同依赖项会影响第一个参数函数的执行​​依赖性参数说明​​...(() => { // 实现函数 return () => 作用逻辑 })自定义 Hook 函数​​概念​​: 是以 use 打头的函数,通过自定义 Hook 函数可以用来实现逻辑的封装​​使用规则​​...action 对象参数,在调用时,参数会被传递到 action 对象的 payload 属性上​​异步状态操作​​:主要步骤是: 单独封装一个函数 在函数内部 return 一个新函数,在新函数中 封装异步请求获取数据调用同步方法

    44010

    React Hook技术实战篇

    提供处理副作用的函数(数据订阅, 更新dom等), 也能够自定义Hook Api, 使得开发起来具有灵活性, 更多Api可以点击详情 使用React Hook获取数据 import React, { useState...的钩子通过axios获取远程mock数据, 并且使用setData更新页面.但是在运行程序的时候, 会出现一个问题即会发送两次请求,使用useEffect发送请求时,相当于在componentDidMount...而使用自定义Hook的好处, 就说组件本身不需要对于Hook有太多的了解, 只需要获取一个组件所需要的变量就可以....Reducer Hook 到目前为止,我们已经使用各种状态挂钩来管理数据,加载状态的数据获取状态。然而,所有这些状态,由他们自己的状态钩子管理,属于一起,因为他们关心相同的数据。...例如,在成功请求的情况下,有效载荷用于设置新状态对象的数据。 总之,Reducer Hook确保状态管理的这一部分用自己的逻辑封装。通过提供操作类型和可选的有效负载,你将可以以自己可预见的状态结束。

    4.9K80

    社招前端一面react面试题汇总

    但是,我们推荐你一开始先用 useEffect,只有当它出问题的时候再尝试使用 useLayoutEffect。useEffect 可以表达所有这些的组合。...Ajax请求应该写在组件创建期的第五个阶段,即 componentDidMount生命周期方法中。原因如下。在创建期的其他阶段,组件尚未渲染完成。...而在存在期的5个阶段,又不能确保生命周期方法一定会执行(如通过 shouldComponentUpdate方法优化更新等)。在销毀期,组件即将被销毁,请求数据变得无意义。...因此在这些阶段发岀Ajax请求显然不是最好的选择。在组件尚未挂载之前,Ajax请求将无法执行完毕,如果此时发出请求,将意味着在组件挂载之前更新状态(如执行 setState),这通常是不起作用的。...当然可以通过 setState 的第二个参数中的 callback 拿到更新后的结果setState 的批量更新优化也是建立在异步(合成事件、钩子函数)之上的,在原生事件和 setTimeout 中不会批量更新

    3.9K20

    美丽的公主和它的27个React 自定义 Hook

    React 自定义 Hook React自定义Hooks是「可重复使用的函数」,允许开发人员以可重复使用的方式抽象和封装复杂的逻辑,「用于共享非可视逻辑的Hooks模式」 ❝自定义Hook是通过组合现有的...自定义Hooks遵循使用use前缀的命名约定,这允许它们利用React的Hooks规则的优势。 通过创建自定义Hooks,开发人员可以模块化和组织他们的代码,使其更易读、易维护和易测试。...这个自定义钩子的一个重要优点是,它确保即使在组件重新渲染期间更改,回调函数仍然保持最新状态。通过使用 useRef 来存储回调引用,该钩子保证始终调用最新版本的函数。...它还可用于优化网络请求,确保仅在用户停止输入或选择选项后发送请求。...通过利用 useRef 钩子,useUpdateEffect 跟踪首次渲染,并在该阶段跳过回调。 使用场景 这个自定义钩子可以在各种场景中使用。

    2.8K20

    美团前端一面必会react面试题4

    如何避免重复发起ajax获取数据?数据放在redux里面在使用 React Router时,如何获取当前页面的路由或浏览器中地址栏中的地址?...useEffect(callback, source)接受两个参数callback: 钩子回调函数;source: 设置触发条件,仅当 source 发生改变时才会触发;useEffect钩子在没有传入...: 传入[],回调中的返回的函数也只会被最终执行一次const useUnmount = (fn) => useEffect(() => fn, [])mounted: 可以使用 useState 封装成一个高度可复用的...;自定义钩子(useXxxxx): 基于 Hooks 可以引用其它 Hooks 这个特性,我们可以编写自定义钩子,如上面的useMounted。...又例如,我们需要每个页面自定义标题:function useTitle(title) { useEffect( () => { document.title = title; }

    3.9K30

    (译) 如何使用 React hooks 获取 api 接口数据

    原文地址:robinwieruch 全文使用意译,不是重要的我就没有翻译了 在本教程中,我想向你展示如何使用 state 和 effect 钩子在React中获取数据。...Data Fetching Hook) 其实就是请求的封装 为了能够提取自定义的请求 hook,除了属于输入框的 query 字段,别的包括 loading 加载器、错误处理函数都要包括在内。...然而,所有的这些状态,通过他们自己的状态管理,都属于同一个整体,因为他们所关心的数据状态都是请求相关的。正如你所看到的,他们都在 fetch 函数中使用。...这样,调用useDataApi自定义钩子的人仍然可以访问数据,isLoading和isError: const useDataApi = (initialUrl, initialData) => {...让我们看看我们如何阻止在数据提取的自定义钩子中设置状态: const useDataApi = (initialUrl, initialData) => { const [url, setUrl]

    30.8K20

    干货 | React Hook的实现原理和最佳实践

    将日志打印和记录时间功能抽象出一个useLogTime自定义Hook。如果其他组件需要打印日志或者记录时间,只要直接调用useLogTime这个自定义Hook就可以了。是不是有种封装函数的感觉。...3.2 如何通过React Hook进行数据请求 前端页面免不了要和数据打交道,在Class组件中我们通常都是在componentDidMount生命周期中发起数据请求,然而我们使用Hook时该如何发送请求呢...3.5 一起来封装常用的Hook 在开始封装常用Hook之前插一个题外话,我们在开发中时,不可能都是新项目,对于那些老项目(react已经升级到16.8.x)我们应该如何去使用Hook呢?...所以为了解决这个问题迫切需要一个useInterval自定义钩子。...我相信大家看了这篇文章一定会蠢蠢欲动,创建一个自定义 Hook 。点击这里你们使用过哪些自定义Hook函数,可以分享、学习其他人是如何自定义有趣的Hook。

    11.1K22

    阿里前端二面必会react面试题总结1

    可以使用自定义事件通信(发布订阅模式)可以通过redux等进行全局状态管理如果是兄弟组件通信,可以找到这两个兄弟节点共同的父节点, 结合父子间通信方式进行通信。...state、 各种组件生命周期钩子等,但是在函数定义中,我们却无能为力,因此 React 16.8 版本推出了一个新功能 (React Hooks),通过它,可以更好的在函数定义组件中使用 React...useEffect(callback, source)接受两个参数callback: 钩子回调函数;source: 设置触发条件,仅当 source 发生改变时才会触发;useEffect钩子在没有传入...: 传入[],回调中的返回的函数也只会被最终执行一次const useUnmount = (fn) => useEffect(() => fn, [])mounted: 可以使用 useState 封装成一个高度可复用的...;自定义钩子(useXxxxx): 基于 Hooks 可以引用其它 Hooks 这个特性,我们可以编写自定义钩子,如上面的useMounted。

    3.6K30

    一份react面试题总结

    在Redux中使用 Action的时候, Action文件里尽量保持 Action文件的纯净,传入什么数据就返回什么数据,最妤把请求的数据和 Action方法分离开,以保持 Action的纯净。...特性,例如 state、 各种组件生命周期钩子等,但是在函数定义中,我们却无能为力,因此 React 16.8 版本推出了一个新功能 (React Hooks),通过它,可以更好的在函数定义组件中使用...useEffect(callback, source)接受两个参数 callback: 钩子回调函数; source: 设置触发条件,仅当 source 发生改变时才会触发; useEffect钩子在没有传入...; 自定义钩子(useXxxxx): 基于 Hooks 可以引用其它 Hooks 这个特性,我们可以编写自定义钩子,如上面的useMounted。...介绍一下react 以前我们没有jquery的时候,我们大概的流程是从后端通过ajax获取到数据然后使用jquery生成dom结果然后更新到页面当中,但是随着业务发展,我们的项目可能会越来越复杂,我们每次请求到数据

    8.1K20
    领券